home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / mac / DirectX SDK / DXSDK / include / ksmedia.h < prev    next >
Text File  |  2001-10-08  |  428KB  |  9,075 lines

  1. /*++
  2.  
  3. Copyright (c) Microsoft Corporation. All rights reserved.
  4.  
  5. Module Name:
  6.  
  7.     ksmedia.h
  8.  
  9. Abstract:
  10.  
  11.     WDM-CSA Multimedia Definitions.
  12.  
  13. --*/
  14.  
  15. #if !defined(_KS_)
  16. #error KS.H must be included before KSMEDIA.H
  17. #endif // !defined(_KS_)
  18.  
  19. #if !defined(_KSMEDIA_)
  20. #define _KSMEDIA_
  21.  
  22.  
  23. /////////////////////////////////////////////////////////////////////////////
  24. //
  25. //  Windows XP vs. DirectX 8.0 header merge
  26. //
  27. //  Separate the updated Windows XP version of this header from the downlevel
  28. //  version that shipped with the DirectX 8.0 SDK.  Since development 
  29. //  on BDA technology continued for Windows XP, some changes were made to
  30. //  this file in order to improve the interface and functionality.
  31. //
  32. //  To maintain compatibility with older applications which rely on the
  33. //  DirectX 8.0 versions of these files, the DirectX 8.1 version includes
  34. //  both the Windows XP content and the DirectX 8.0 content, which are 
  35. //  separated by the #if (WINVER >= 0x501) preprocessor directive.
  36. //
  37. //  Therefore, if you define WINVER to be 0x501 to specify Windows XP,
  38. //  the revised content will be compiled.  Otherwise, the original 
  39. //  DirectX 8.0 content will be used.
  40. //
  41. /////////////////////////////////////////////////////////////////////////////
  42.  
  43. #if (WINVER >= 0x501)    // Windows XP content
  44.  
  45.  
  46. typedef struct {
  47.     KSPROPERTY      Property;
  48.     KSMULTIPLE_ITEM MultipleItem;
  49. } KSMULTIPLE_DATA_PROP, *PKSMULTIPLE_DATA_PROP;
  50.  
  51. #define STATIC_KSMEDIUMSETID_MidiBus \
  52.     0x05908040L, 0x3246, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  53. DEFINE_GUIDSTRUCT("05908040-3246-11D0-A5D6-28DB04C10000", KSMEDIUMSETID_MidiBus);
  54. #define KSMEDIUMSETID_MidiBus DEFINE_GUIDNAMED(KSMEDIUMSETID_MidiBus)
  55.  
  56. #define STATIC_KSMEDIUMSETID_VPBus \
  57.     0xA18C15ECL, 0xCE43, 0x11D0, 0xAB, 0xE7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  58. DEFINE_GUIDSTRUCT("A18C15EC-CE43-11D0-ABE7-00A0C9223196", KSMEDIUMSETID_VPBus);
  59. #define KSMEDIUMSETID_VPBus DEFINE_GUIDNAMED(KSMEDIUMSETID_VPBus)
  60.  
  61. #define STATIC_KSINTERFACESETID_Media \
  62.     0x3A13EB40L, 0x30A7, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  63. DEFINE_GUIDSTRUCT("3A13EB40-30A7-11D0-A5D6-28DB04C10000", KSINTERFACESETID_Media);
  64. #define KSINTERFACESETID_Media DEFINE_GUIDNAMED(KSINTERFACESETID_Media)
  65.  
  66. typedef enum {
  67.     KSINTERFACE_MEDIA_MUSIC,
  68.     KSINTERFACE_MEDIA_WAVE_BUFFERED,
  69.     KSINTERFACE_MEDIA_WAVE_QUEUED
  70. } KSINTERFACE_MEDIA;
  71.  
  72.  
  73. #if !defined(INIT_USBAUDIO_MID)
  74. // {4e1cecd2-1679-463b-a72f-a5bf64c86eba}
  75. #define INIT_USBAUDIO_MID(guid, id)\
  76. {\
  77.     (guid)->Data1 = 0x4e1cecd2 + (USHORT)(id);\
  78.     (guid)->Data2 = 0x1679;\
  79.     (guid)->Data3 = 0x463b;\
  80.     (guid)->Data4[0] = 0xa7;\
  81.     (guid)->Data4[1] = 0x2f;\
  82.     (guid)->Data4[2] = 0xa5;\
  83.     (guid)->Data4[3] = 0xbf;\
  84.     (guid)->Data4[4] = 0x64;\
  85.     (guid)->Data4[5] = 0xc8;\
  86.     (guid)->Data4[6] = 0x6e;\
  87.     (guid)->Data4[7] = 0xba;\
  88. }
  89. #define EXTRACT_USBAUDIO_MID(guid)\
  90.     (USHORT)((guid)->Data1 - 0x4e1cecd2)
  91. #define DEFINE_USBAUDIO_MID_GUID(id)\
  92.     0x4e1cecd2+(USHORT)(id), 0x1679, 0x463b, 0xa7, 0x2f, 0xa5, 0xbf, 0x64, 0xc8, 0x6e, 0xba
  93.  
  94. #define IS_COMPATIBLE_USBAUDIO_MID(guid)\
  95.     (((guid)->Data1 >= 0x4e1cecd2) &&\
  96.     ((guid)->Data1 < 0x4e1cecd2 + 0xffff) &&\
  97.     ((guid)->Data2 == 0x1679) &&\
  98.     ((guid)->Data3 == 0x463b) &&\
  99.     ((guid)->Data4[0] == 0xa7) &&\
  100.     ((guid)->Data4[1] == 0x2f) &&\
  101.     ((guid)->Data4[2] == 0xa5) &&\
  102.     ((guid)->Data4[3] == 0xbf) &&\
  103.     ((guid)->Data4[4] == 0x64) &&\
  104.     ((guid)->Data4[5] == 0xc8) &&\
  105.     ((guid)->Data4[6] == 0x6e) &&\
  106.     ((guid)->Data4[7] == 0xba))
  107. #endif // !defined(INIT_USBAUDIO_MID)
  108.  
  109. #if !defined(INIT_USBAUDIO_PID)
  110. // {abcc5a5e-c263-463b-a72f-a5bf64c86eba}
  111. #define INIT_USBAUDIO_PID(guid, id)\
  112. {\
  113.     (guid)->Data1 = 0xabcc5a5e + (USHORT)(id);\
  114.     (guid)->Data2 = 0xc263;\
  115.     (guid)->Data3 = 0x463b;\
  116.     (guid)->Data4[0] = 0xa7;\
  117.     (guid)->Data4[1] = 0x2f;\
  118.     (guid)->Data4[2] = 0xa5;\
  119.     (guid)->Data4[3] = 0xbf;\
  120.     (guid)->Data4[4] = 0x64;\
  121.     (guid)->Data4[5] = 0xc8;\
  122.     (guid)->Data4[6] = 0x6e;\
  123.     (guid)->Data4[7] = 0xba;\
  124. }
  125. #define EXTRACT_USBAUDIO_PID(guid)\
  126.     (USHORT)((guid)->Data1 - 0xabcc5a5e)
  127. #define DEFINE_USBAUDIO_PID_GUID(id)\
  128.     0xabcc5a5e+(USHORT)(id), 0xc263, 0x463b, 0xa7, 0x2f, 0xa5, 0xbf, 0x64, 0xc8, 0x6e, 0xba
  129.  
  130. #define IS_COMPATIBLE_USBAUDIO_PID(guid)\
  131.     (((guid)->Data1 >= 0xabcc5a5e) &&\
  132.     ((guid)->Data1 < 0xabcc5a5e + 0xffff) &&\
  133.     ((guid)->Data2 == 0xc263) &&\
  134.     ((guid)->Data3 == 0x463b) &&\
  135.     ((guid)->Data4[0] == 0xa7) &&\
  136.     ((guid)->Data4[1] == 0x2f) &&\
  137.     ((guid)->Data4[2] == 0xa5) &&\
  138.     ((guid)->Data4[3] == 0xbf) &&\
  139.     ((guid)->Data4[4] == 0x64) &&\
  140.     ((guid)->Data4[5] == 0xc8) &&\
  141.     ((guid)->Data4[6] == 0x6e) &&\
  142.     ((guid)->Data4[7] == 0xba))
  143. #endif // !defined(INIT_USBAUDIO_PID)
  144.  
  145. #if !defined(INIT_USBAUDIO_PRODUCT_NAME)
  146. // {FC575048-2E08-463B-A72F-A5BF64C86EBA}
  147. #define INIT_USBAUDIO_PRODUCT_NAME(guid, vid, pid, strIndex)\
  148. {\
  149.     (guid)->Data1 = 0XFC575048 + (USHORT)(vid);\
  150.     (guid)->Data2 = 0x2E08     + (USHORT)(pid);\
  151.     (guid)->Data3 = 0x463B     + (USHORT)(strIndex);\
  152.     (guid)->Data4[0] = 0xA7;\
  153.     (guid)->Data4[1] = 0x2F;\
  154.     (guid)->Data4[2] = 0xA5;\
  155.     (guid)->Data4[3] = 0xBF;\
  156.     (guid)->Data4[4] = 0x64;\
  157.     (guid)->Data4[5] = 0xC8;\
  158.     (guid)->Data4[6] = 0x6E;\
  159.     (guid)->Data4[7] = 0xBA;\
  160. }
  161. #define DEFINE_USBAUDIO_PRODUCT_NAME(vid, pid, strIndex)\
  162.     0xFC575048+(USHORT)(vid), 0x2E08+(USHORT)(pid), 0x463B+(USHORT)(strIndex), 0xA7, 0x2F, 0xA5, 0xBF, 0x64, 0xC8, 0x6E, 0xBA
  163. #endif // !defined(INIT_USBAUDIO_PRODUCT_NAME)
  164.  
  165.  
  166. // USB Component ID
  167. #define STATIC_KSCOMPONENTID_USBAUDIO \
  168.     0x8F1275F0, 0x26E9, 0x4264, 0xBA, 0x4D, 0x39, 0xFF, 0xF0, 0x1D, 0x94, 0xAA
  169. DEFINE_GUIDSTRUCT("8F1275F0-26E9-4264-BA4D-39FFF01D94AA", KSCOMPONENTID_USBAUDIO);
  170. #define KSCOMPONENTID_USBAUDIO DEFINE_GUIDNAMED(KSCOMPONENTID_USBAUDIO)
  171.  
  172. // USB Terminals
  173. #define INIT_USB_TERMINAL(guid, id)\
  174. {\
  175.     (guid)->Data1 = 0xDFF219E0 + (USHORT)(id);\
  176.     (guid)->Data2 = 0xF70F;\
  177.     (guid)->Data3 = 0x11D0;\
  178.     (guid)->Data4[0] = 0xb9;\
  179.     (guid)->Data4[1] = 0x17;\
  180.     (guid)->Data4[2] = 0x00;\
  181.     (guid)->Data4[3] = 0xa0;\
  182.     (guid)->Data4[4] = 0xc9;\
  183.     (guid)->Data4[5] = 0x22;\
  184.     (guid)->Data4[6] = 0x31;\
  185.     (guid)->Data4[7] = 0x96;\
  186. }
  187. #define EXTRACT_USB_TERMINAL(guid)\
  188.     (USHORT)((guid)->Data1 - 0xDFF219E0)
  189. #define DEFINE_USB_TERMINAL_GUID(id)\
  190.     0xDFF219E0+(USHORT)(id), 0xF70F, 0x11D0, 0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  191.  
  192. #define STATIC_KSNODETYPE_MICROPHONE\
  193.     DEFINE_USB_TERMINAL_GUID(0x0201)
  194. DEFINE_GUIDSTRUCT("DFF21BE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE);
  195. #define KSNODETYPE_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE)
  196.  
  197. #define STATIC_KSNODETYPE_DESKTOP_MICROPHONE\
  198.     DEFINE_USB_TERMINAL_GUID(0x0202)
  199. DEFINE_GUIDSTRUCT("DFF21BE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_MICROPHONE);
  200. #define KSNODETYPE_DESKTOP_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_MICROPHONE)
  201.  
  202. #define STATIC_KSNODETYPE_PERSONAL_MICROPHONE\
  203.     DEFINE_USB_TERMINAL_GUID(0x0203)
  204. DEFINE_GUIDSTRUCT("DFF21BE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PERSONAL_MICROPHONE);
  205. #define KSNODETYPE_PERSONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_PERSONAL_MICROPHONE)
  206.  
  207. #define STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE\
  208.     DEFINE_USB_TERMINAL_GUID(0x0204)
  209. DEFINE_GUIDSTRUCT("DFF21BE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE);
  210. #define KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE)
  211.  
  212. #define STATIC_KSNODETYPE_MICROPHONE_ARRAY\
  213.     DEFINE_USB_TERMINAL_GUID(0x0205)
  214. DEFINE_GUIDSTRUCT("DFF21BE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE_ARRAY);
  215. #define KSNODETYPE_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE_ARRAY)
  216.  
  217. #define STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY\
  218.     DEFINE_USB_TERMINAL_GUID(0x0206)
  219. DEFINE_GUIDSTRUCT("DFF21BE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PROCESSING_MICROPHONE_ARRAY);
  220. #define KSNODETYPE_PROCESSING_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_PROCESSING_MICROPHONE_ARRAY)
  221.  
  222. #define STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR \
  223.     0x830a44f2, 0xa32d, 0x476b,  0xbe, 0x97, 0x42, 0x84, 0x56, 0x73, 0xb3, 0x5a
  224. DEFINE_GUIDSTRUCT("830a44f2-a32d-476b-be97-42845673b35a", KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR);
  225. #define KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR)
  226.  
  227. #define STATIC_KSNODETYPE_SPEAKER\
  228.     DEFINE_USB_TERMINAL_GUID(0x0301)
  229. DEFINE_GUIDSTRUCT("DFF21CE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKER);
  230. #define KSNODETYPE_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_SPEAKER)
  231.  
  232. #define STATIC_KSNODETYPE_HEADPHONES\
  233.     DEFINE_USB_TERMINAL_GUID(0x0302)
  234. DEFINE_GUIDSTRUCT("DFF21CE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADPHONES);
  235. #define KSNODETYPE_HEADPHONES DEFINE_GUIDNAMED(KSNODETYPE_HEADPHONES)
  236.  
  237. #define STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO\
  238.     DEFINE_USB_TERMINAL_GUID(0x0303)
  239. DEFINE_GUIDSTRUCT("DFF21CE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO);
  240. #define KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO)
  241.  
  242. #define STATIC_KSNODETYPE_DESKTOP_SPEAKER\
  243.     DEFINE_USB_TERMINAL_GUID(0x0304)
  244. DEFINE_GUIDSTRUCT("DFF21CE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_SPEAKER);
  245. #define KSNODETYPE_DESKTOP_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_SPEAKER)
  246.  
  247. #define STATIC_KSNODETYPE_ROOM_SPEAKER\
  248.     DEFINE_USB_TERMINAL_GUID(0x0305)
  249. DEFINE_GUIDSTRUCT("DFF21CE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ROOM_SPEAKER);
  250. #define KSNODETYPE_ROOM_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_ROOM_SPEAKER)
  251.  
  252. #define STATIC_KSNODETYPE_COMMUNICATION_SPEAKER\
  253.     DEFINE_USB_TERMINAL_GUID(0x0306)
  254. DEFINE_GUIDSTRUCT("DFF21CE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_COMMUNICATION_SPEAKER);
  255. #define KSNODETYPE_COMMUNICATION_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_COMMUNICATION_SPEAKER)
  256.  
  257. #define STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER\
  258.     DEFINE_USB_TERMINAL_GUID(0x0307)
  259. DEFINE_GUIDSTRUCT("DFF21CE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER);
  260. #define KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER)
  261.  
  262. #define STATIC_KSNODETYPE_HANDSET\
  263.     DEFINE_USB_TERMINAL_GUID(0x0401)
  264. DEFINE_GUIDSTRUCT("DFF21DE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HANDSET);
  265. #define KSNODETYPE_HANDSET DEFINE_GUIDNAMED(KSNODETYPE_HANDSET)
  266.  
  267. #define STATIC_KSNODETYPE_HEADSET\
  268.     DEFINE_USB_TERMINAL_GUID(0x0402)
  269. DEFINE_GUIDSTRUCT("DFF21DE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADSET);
  270. #define KSNODETYPE_HEADSET DEFINE_GUIDNAMED(KSNODETYPE_HEADSET)
  271.  
  272. #define STATIC_KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION\
  273.     DEFINE_USB_TERMINAL_GUID(0x0403)
  274. DEFINE_GUIDSTRUCT("DFF21DE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION);
  275. #define KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION DEFINE_GUIDNAMED(KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION)
  276.  
  277. #define STATIC_KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE\
  278.     DEFINE_USB_TERMINAL_GUID(0x0404)
  279. DEFINE_GUIDSTRUCT("DFF21DE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE);
  280. #define KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE)
  281.  
  282. #define STATIC_KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE\
  283.     DEFINE_USB_TERMINAL_GUID(0x0405)
  284. DEFINE_GUIDSTRUCT("DFF21DE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE);
  285. #define KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE)
  286.  
  287. #define STATIC_KSNODETYPE_PHONE_LINE\
  288.     DEFINE_USB_TERMINAL_GUID(0x0501)
  289. DEFINE_GUIDSTRUCT("DFF21EE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONE_LINE);
  290. #define KSNODETYPE_PHONE_LINE DEFINE_GUIDNAMED(KSNODETYPE_PHONE_LINE)
  291.  
  292. #define STATIC_KSNODETYPE_TELEPHONE\
  293.     DEFINE_USB_TERMINAL_GUID(0x0502)
  294. DEFINE_GUIDSTRUCT("DFF21EE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TELEPHONE);
  295. #define KSNODETYPE_TELEPHONE DEFINE_GUIDNAMED(KSNODETYPE_TELEPHONE)
  296.  
  297. #define STATIC_KSNODETYPE_DOWN_LINE_PHONE\
  298.     DEFINE_USB_TERMINAL_GUID(0x0503)
  299. DEFINE_GUIDSTRUCT("DFF21EE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DOWN_LINE_PHONE);
  300. #define KSNODETYPE_DOWN_LINE_PHONE DEFINE_GUIDNAMED(KSNODETYPE_DOWN_LINE_PHONE)
  301.  
  302. #define STATIC_KSNODETYPE_ANALOG_CONNECTOR\
  303.     DEFINE_USB_TERMINAL_GUID(0x601)
  304. DEFINE_GUIDSTRUCT("DFF21FE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_CONNECTOR);
  305. #define KSNODETYPE_ANALOG_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_CONNECTOR)
  306.  
  307. #define STATIC_KSNODETYPE_DIGITAL_AUDIO_INTERFACE\
  308.     DEFINE_USB_TERMINAL_GUID(0x0602)
  309. DEFINE_GUIDSTRUCT("DFF21FE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DIGITAL_AUDIO_INTERFACE);
  310. #define KSNODETYPE_DIGITAL_AUDIO_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_DIGITAL_AUDIO_INTERFACE)
  311.  
  312. #define STATIC_KSNODETYPE_LINE_CONNECTOR\
  313.     DEFINE_USB_TERMINAL_GUID(0x0603)
  314. DEFINE_GUIDSTRUCT("DFF21FE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LINE_CONNECTOR);
  315. #define KSNODETYPE_LINE_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LINE_CONNECTOR)
  316.  
  317. #define STATIC_KSNODETYPE_LEGACY_AUDIO_CONNECTOR\
  318.     DEFINE_USB_TERMINAL_GUID(0x0604)
  319. DEFINE_GUIDSTRUCT("DFF21FE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEGACY_AUDIO_CONNECTOR);
  320. #define KSNODETYPE_LEGACY_AUDIO_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LEGACY_AUDIO_CONNECTOR)
  321.  
  322. #define STATIC_KSNODETYPE_SPDIF_INTERFACE\
  323.     DEFINE_USB_TERMINAL_GUID(0x0605)
  324. DEFINE_GUIDSTRUCT("DFF21FE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPDIF_INTERFACE);
  325. #define KSNODETYPE_SPDIF_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_SPDIF_INTERFACE)
  326.  
  327. #define STATIC_KSNODETYPE_1394_DA_STREAM\
  328.     DEFINE_USB_TERMINAL_GUID(0x0606)
  329. DEFINE_GUIDSTRUCT("DFF21FE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DA_STREAM);
  330. #define KSNODETYPE_1394_DA_STREAM DEFINE_GUIDNAMED(KSNODETYPE_1394_DA_STREAM)
  331.  
  332. #define STATIC_KSNODETYPE_1394_DV_STREAM_SOUNDTRACK\
  333.     DEFINE_USB_TERMINAL_GUID(0x0607)
  334. DEFINE_GUIDSTRUCT("DFF21FE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DV_STREAM_SOUNDTRACK);
  335. #define KSNODETYPE_1394_DV_STREAM_SOUNDTRACK DEFINE_GUIDNAMED(KSNODETYPE_1394_DV_STREAM_SOUNDTRACK)
  336.  
  337. #define STATIC_KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE\
  338.     DEFINE_USB_TERMINAL_GUID(0x0701)
  339. DEFINE_GUIDSTRUCT("DFF220E1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE);
  340. #define KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE DEFINE_GUIDNAMED(KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE)
  341.  
  342. #define STATIC_KSNODETYPE_EQUALIZATION_NOISE\
  343.     DEFINE_USB_TERMINAL_GUID(0x0702)
  344. DEFINE_GUIDSTRUCT("DFF220E2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_EQUALIZATION_NOISE);
  345. #define KSNODETYPE_EQUALIZATION_NOISE DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZATION_NOISE)
  346.  
  347. #define STATIC_KSNODETYPE_CD_PLAYER\
  348.     DEFINE_USB_TERMINAL_GUID(0x0703)
  349. DEFINE_GUIDSTRUCT("DFF220E3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CD_PLAYER);
  350. #define KSNODETYPE_CD_PLAYER DEFINE_GUIDNAMED(KSNODETYPE_CD_PLAYER)
  351.  
  352. #define STATIC_KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE\
  353.     DEFINE_USB_TERMINAL_GUID(0x0704)
  354. DEFINE_GUIDSTRUCT("DFF220E4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE);
  355. #define KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE DEFINE_GUIDNAMED(KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE)
  356.  
  357. #define STATIC_KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE\
  358.     DEFINE_USB_TERMINAL_GUID(0x0705)
  359. DEFINE_GUIDSTRUCT("DFF220E5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE);
  360. #define KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE DEFINE_GUIDNAMED(KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE)
  361.  
  362. #define STATIC_KSNODETYPE_MINIDISK\
  363.     DEFINE_USB_TERMINAL_GUID(0x0706)
  364. DEFINE_GUIDSTRUCT("DFF220E6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MINIDISK);
  365. #define KSNODETYPE_MINIDISK DEFINE_GUIDNAMED(KSNODETYPE_MINIDISK)
  366.  
  367. #define STATIC_KSNODETYPE_ANALOG_TAPE\
  368.     DEFINE_USB_TERMINAL_GUID(0x0707)
  369. DEFINE_GUIDSTRUCT("DFF220E7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_TAPE);
  370. #define KSNODETYPE_ANALOG_TAPE DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_TAPE)
  371.  
  372. #define STATIC_KSNODETYPE_PHONOGRAPH\
  373.     DEFINE_USB_TERMINAL_GUID(0x0708)
  374. DEFINE_GUIDSTRUCT("DFF220E8-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONOGRAPH);
  375. #define KSNODETYPE_PHONOGRAPH DEFINE_GUIDNAMED(KSNODETYPE_PHONOGRAPH)
  376.  
  377. #define STATIC_KSNODETYPE_VCR_AUDIO\
  378.     DEFINE_USB_TERMINAL_GUID(0x0708)
  379. DEFINE_GUIDSTRUCT("DFF220E9-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VCR_AUDIO);
  380. #define KSNODETYPE_VCR_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VCR_AUDIO)
  381.  
  382. #define STATIC_KSNODETYPE_VIDEO_DISC_AUDIO\
  383.     DEFINE_USB_TERMINAL_GUID(0x070A)
  384. DEFINE_GUIDSTRUCT("DFF220EA-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VIDEO_DISC_AUDIO);
  385. #define KSNODETYPE_VIDEO_DISC_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_DISC_AUDIO)
  386.  
  387. #define STATIC_KSNODETYPE_DVD_AUDIO\
  388.     DEFINE_USB_TERMINAL_GUID(0x070B)
  389. DEFINE_GUIDSTRUCT("DFF220EB-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DVD_AUDIO);
  390. #define KSNODETYPE_DVD_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DVD_AUDIO)
  391.  
  392. #define STATIC_KSNODETYPE_TV_TUNER_AUDIO\
  393.     DEFINE_USB_TERMINAL_GUID(0x070C)
  394. DEFINE_GUIDSTRUCT("DFF220EC-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TV_TUNER_AUDIO);
  395. #define KSNODETYPE_TV_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_TV_TUNER_AUDIO)
  396.  
  397. #define STATIC_KSNODETYPE_SATELLITE_RECEIVER_AUDIO\
  398.     DEFINE_USB_TERMINAL_GUID(0x070D)
  399. DEFINE_GUIDSTRUCT("DFF220ED-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SATELLITE_RECEIVER_AUDIO);
  400. #define KSNODETYPE_SATELLITE_RECEIVER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_SATELLITE_RECEIVER_AUDIO)
  401.  
  402. #define STATIC_KSNODETYPE_CABLE_TUNER_AUDIO\
  403.     DEFINE_USB_TERMINAL_GUID(0x070E)
  404. DEFINE_GUIDSTRUCT("DFF220EE-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CABLE_TUNER_AUDIO);
  405. #define KSNODETYPE_CABLE_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_CABLE_TUNER_AUDIO)
  406.  
  407. #define STATIC_KSNODETYPE_DSS_AUDIO\
  408.     DEFINE_USB_TERMINAL_GUID(0x070F)
  409. DEFINE_GUIDSTRUCT("DFF220EF-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DSS_AUDIO);
  410. #define KSNODETYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DSS_AUDIO)
  411.  
  412. #define STATIC_KSNODETYPE_RADIO_RECEIVER\
  413.     DEFINE_USB_TERMINAL_GUID(0x0710)
  414. DEFINE_GUIDSTRUCT("DFF220F0-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_RECEIVER);
  415. #define KSNODETYPE_RADIO_RECEIVER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_RECEIVER)
  416.  
  417. #define STATIC_KSNODETYPE_RADIO_TRANSMITTER\
  418.     DEFINE_USB_TERMINAL_GUID(0x0711)
  419. DEFINE_GUIDSTRUCT("DFF220F1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_TRANSMITTER);
  420. #define KSNODETYPE_RADIO_TRANSMITTER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_TRANSMITTER)
  421.  
  422. #define STATIC_KSNODETYPE_MULTITRACK_RECORDER\
  423.     DEFINE_USB_TERMINAL_GUID(0x0712)
  424. DEFINE_GUIDSTRUCT("DFF220F2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MULTITRACK_RECORDER);
  425. #define KSNODETYPE_MULTITRACK_RECORDER DEFINE_GUIDNAMED(KSNODETYPE_MULTITRACK_RECORDER)
  426.  
  427. #define STATIC_KSNODETYPE_SYNTHESIZER\
  428.     DEFINE_USB_TERMINAL_GUID(0x0713)
  429. DEFINE_GUIDSTRUCT("DFF220F3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SYNTHESIZER);
  430. #define KSNODETYPE_SYNTHESIZER DEFINE_GUIDNAMED(KSNODETYPE_SYNTHESIZER)
  431.  
  432. // Microsoft's WDMAUD virtual swsynth pin name guid
  433.  
  434. #define STATIC_KSNODETYPE_SWSYNTH\
  435.     0x423274A0L, 0x8B81, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  436. DEFINE_GUIDSTRUCT("423274A0-8B81-11D1-A050-0000F8004788", KSNODETYPE_SWSYNTH);
  437. #define KSNODETYPE_SWSYNTH DEFINE_GUIDNAMED(KSNODETYPE_SWSYNTH)
  438.  
  439. // Microsoft's SWMIDI midi pin and node name guid
  440.  
  441. #define STATIC_KSNODETYPE_SWMIDI\
  442.     0xCB9BEFA0L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  443. DEFINE_GUIDSTRUCT("CB9BEFA0-A251-11D1-A050-0000F8004788", KSNODETYPE_SWMIDI);
  444. #define KSNODETYPE_SWMIDI DEFINE_GUIDNAMED(KSNODETYPE_SWMIDI)
  445.  
  446. #define STATIC_KSNODETYPE_DRM_DESCRAMBLE\
  447.     0xFFBB6E3FL, 0xCCFE, 0x4D84, 0x90, 0xD9, 0x42, 0x14, 0x18, 0xB0, 0x3A, 0x8E
  448. DEFINE_GUIDSTRUCT("FFBB6E3F-CCFE-4D84-90D9-421418B03A8E", KSNODETYPE_DRM_DESCRAMBLE);
  449. #define KSNODETYPE_DRM_DESCRAMBLE DEFINE_GUIDNAMED(KSNODETYPE_DRM_DESCRAMBLE)
  450.  
  451. // General categories
  452. #define STATIC_KSCATEGORY_AUDIO \
  453.     0x6994AD04L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  454. DEFINE_GUIDSTRUCT("6994AD04-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_AUDIO);
  455. #define KSCATEGORY_AUDIO DEFINE_GUIDNAMED(KSCATEGORY_AUDIO)
  456.  
  457. #define STATIC_KSCATEGORY_VIDEO \
  458.     0x6994AD05L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  459. DEFINE_GUIDSTRUCT("6994AD05-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_VIDEO);
  460. #define KSCATEGORY_VIDEO DEFINE_GUIDNAMED(KSCATEGORY_VIDEO)
  461.  
  462. #define STATIC_KSCATEGORY_TEXT \
  463.     0x6994AD06L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  464. DEFINE_GUIDSTRUCT("6994AD06-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_TEXT);
  465. #define KSCATEGORY_TEXT DEFINE_GUIDNAMED(KSCATEGORY_TEXT)
  466.  
  467. #define STATIC_KSCATEGORY_NETWORK \
  468.     0x67C9CC3CL, 0x69C4, 0x11D2, 0x87, 0x59, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  469. DEFINE_GUIDSTRUCT("67C9CC3C-69C4-11D2-8759-00A0C9223196", KSCATEGORY_NETWORK);
  470. #define KSCATEGORY_NETWORK DEFINE_GUIDNAMED(KSCATEGORY_NETWORK)
  471.  
  472. #define STATIC_KSCATEGORY_TOPOLOGY \
  473.     0xDDA54A40L, 0x1E4C, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
  474. DEFINE_GUIDSTRUCT("DDA54A40-1E4C-11D1-A050-405705C10000", KSCATEGORY_TOPOLOGY);
  475. #define KSCATEGORY_TOPOLOGY DEFINE_GUIDNAMED(KSCATEGORY_TOPOLOGY)
  476.  
  477. #define STATIC_KSCATEGORY_VIRTUAL \
  478.     0x3503EAC4L, 0x1F26, 0x11D1, 0x8A, 0xB0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  479. DEFINE_GUIDSTRUCT("3503EAC4-1F26-11D1-8AB0-00A0C9223196", KSCATEGORY_VIRTUAL);
  480. #define KSCATEGORY_VIRTUAL DEFINE_GUIDNAMED(KSCATEGORY_VIRTUAL)
  481.  
  482. #define STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL \
  483.     0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  484. DEFINE_GUIDSTRUCT("BF963D80-C559-11D0-8A2B-00A0C9255AC1", KSCATEGORY_ACOUSTIC_ECHO_CANCEL);
  485. #define KSCATEGORY_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSCATEGORY_ACOUSTIC_ECHO_CANCEL)
  486.  
  487. #define STATIC_KSCATEGORY_SYSAUDIO \
  488.     0xA7C7A5B1L, 0x5AF3, 0x11D1, 0x9C, 0xED, 0x00, 0xA0, 0x24, 0xBF, 0x04, 0x07
  489. DEFINE_GUIDSTRUCT("A7C7A5B1-5AF3-11D1-9CED-00A024BF0407", KSCATEGORY_SYSAUDIO);
  490. #define KSCATEGORY_SYSAUDIO DEFINE_GUIDNAMED(KSCATEGORY_SYSAUDIO)
  491.  
  492. #define STATIC_KSCATEGORY_WDMAUD \
  493.     0x3E227E76L, 0x690D, 0x11D2, 0x81, 0x61, 0x00, 0x00, 0xF8, 0x77, 0x5B, 0xF1
  494. DEFINE_GUIDSTRUCT("3E227E76-690D-11D2-8161-0000F8775BF1", KSCATEGORY_WDMAUD);
  495. #define KSCATEGORY_WDMAUD DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD)
  496.  
  497. #define STATIC_KSCATEGORY_AUDIO_GFX \
  498.     0x9BAF9572L, 0x340C, 0x11D3, 0xAB, 0xDC, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0x6F
  499. DEFINE_GUIDSTRUCT("9BAF9572-340C-11D3-ABDC-00A0C90AB16F", KSCATEGORY_AUDIO_GFX);
  500. #define KSCATEGORY_AUDIO_GFX DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_GFX)
  501.  
  502. #define STATIC_KSCATEGORY_AUDIO_SPLITTER \
  503.     0x9EA331FAL, 0xB91B, 0x45F8, 0x92, 0x85, 0xBD, 0x2B, 0xC7, 0x7A, 0xFC, 0xDE
  504. DEFINE_GUIDSTRUCT("9EA331FA-B91B-45F8-9285-BD2BC77AFCDE", KSCATEGORY_AUDIO_SPLITTER);
  505. #define KSCATEGORY_AUDIO_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_SPLITTER)
  506.  
  507. #define STATIC_KSCATEGORY_SYNTHESIZER STATIC_KSNODETYPE_SYNTHESIZER
  508. #define KSCATEGORY_SYNTHESIZER KSNODETYPE_SYNTHESIZER
  509.  
  510. #define STATIC_KSCATEGORY_DRM_DESCRAMBLE STATIC_KSNODETYPE_DRM_DESCRAMBLE
  511. #define KSCATEGORY_DRM_DESCRAMBLE KSNODETYPE_DRM_DESCRAMBLE
  512.  
  513. #define STATIC_KSCATEGORY_AUDIO_DEVICE \
  514.     0xFBF6F530L, 0x07B9, 0x11D2, 0xA7, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  515. DEFINE_GUIDSTRUCT("FBF6F530-07B9-11D2-A71E-0000F8004788", KSCATEGORY_AUDIO_DEVICE);
  516. #define KSCATEGORY_AUDIO_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_DEVICE)
  517.  
  518. #define STATIC_KSCATEGORY_PREFERRED_WAVEOUT_DEVICE \
  519.     0xD6C5066EL, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  520. DEFINE_GUIDSTRUCT("D6C5066E-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEOUT_DEVICE);
  521. #define KSCATEGORY_PREFERRED_WAVEOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEOUT_DEVICE)
  522.  
  523. #define STATIC_KSCATEGORY_PREFERRED_WAVEIN_DEVICE \
  524.     0xD6C50671L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  525. DEFINE_GUIDSTRUCT("D6C50671-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEIN_DEVICE);
  526. #define KSCATEGORY_PREFERRED_WAVEIN_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEIN_DEVICE)
  527.  
  528. #define STATIC_KSCATEGORY_PREFERRED_MIDIOUT_DEVICE \
  529.     0xD6C50674L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  530. DEFINE_GUIDSTRUCT("D6C50674-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_MIDIOUT_DEVICE);
  531. #define KSCATEGORY_PREFERRED_MIDIOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_MIDIOUT_DEVICE)
  532.  
  533. // Special pin category for wdmaud
  534.  
  535. #define STATIC_KSCATEGORY_WDMAUD_USE_PIN_NAME \
  536.     0x47A4FA20L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  537. DEFINE_GUIDSTRUCT("47A4FA20-A251-11D1-A050-0000F8004788", KSCATEGORY_WDMAUD_USE_PIN_NAME);
  538. #define KSCATEGORY_WDMAUD_USE_PIN_NAME DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD_USE_PIN_NAME)
  539.  
  540. // Escalante Platform Interface
  541.  
  542. #define STATIC_KSCATEGORY_ESCALANTE_PLATFORM_DRIVER \
  543.     0x74f3aea8L, 0x9768, 0x11d1, 0x8e, 0x07, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e
  544. DEFINE_GUIDSTRUCT("74f3aea8-9768-11d1-8e07-00a0c95ec22e", KSCATEGORY_ESCALANTE_PLATFORM_DRIVER);
  545. #define KSCATEGORY_ESCALANTE_PLATFORM_DRIVER DEFINE_GUIDNAMED(KSCATEGORY_ESCALANTE_PLATFORM_DRIVER)
  546.  
  547. // -- major types ---
  548.  
  549. // 'vids' == MEDIATYPE_Video,
  550. #define STATIC_KSDATAFORMAT_TYPE_VIDEO\
  551.     0x73646976L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  552. DEFINE_GUIDSTRUCT("73646976-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_VIDEO);
  553. #define KSDATAFORMAT_TYPE_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VIDEO)
  554.  
  555. // 'auds' == MEDIATYPE_Audio
  556. #define STATIC_KSDATAFORMAT_TYPE_AUDIO\
  557.     0x73647561L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  558. DEFINE_GUIDSTRUCT("73647561-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_AUDIO);
  559. #define KSDATAFORMAT_TYPE_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUDIO)
  560.  
  561. // 'txts' == MEDIATYPE_Text
  562. #define STATIC_KSDATAFORMAT_TYPE_TEXT\
  563.     0x73747874L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  564. DEFINE_GUIDSTRUCT("73747874-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_TEXT);
  565. #define KSDATAFORMAT_TYPE_TEXT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_TEXT)
  566.  
  567. #if !defined( DEFINE_WAVEFORMATEX_GUID )
  568. #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  569. #endif
  570.  
  571. #define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX\
  572.     0x00000000L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  573. DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_WAVEFORMATEX);
  574. #define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX)
  575.  
  576. #define INIT_WAVEFORMATEX_GUID(Guid, x)\
  577. {\
  578.     *(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX;\
  579.     (Guid)->Data1 = (USHORT)(x);\
  580. }
  581.  
  582. #define EXTRACT_WAVEFORMATEX_ID(Guid)\
  583.     (USHORT)((Guid)->Data1)
  584.  
  585. #define IS_VALID_WAVEFORMATEX_GUID(Guid)\
  586.     (!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT)))
  587.  
  588. #if !defined(INIT_MMREG_MID)
  589. //{d5a47fa7-6d98-11d1-a21a-00a0c9223196}
  590. #define INIT_MMREG_MID(guid, id)\
  591. {\
  592.     (guid)->Data1 = 0xd5a47fa7 + (USHORT)(id);\
  593.     (guid)->Data2 = 0x6d98;\
  594.     (guid)->Data3 = 0x11d1;\
  595.     (guid)->Data4[0] = 0xa2;\
  596.     (guid)->Data4[1] = 0x1a;\
  597.     (guid)->Data4[2] = 0x00;\
  598.     (guid)->Data4[3] = 0xa0;\
  599.     (guid)->Data4[4] = 0xc9;\
  600.     (guid)->Data4[5] = 0x22;\
  601.     (guid)->Data4[6] = 0x31;\
  602.     (guid)->Data4[7] = 0x96;\
  603. }
  604. #define EXTRACT_MMREG_MID(guid)\
  605.     (USHORT)((guid)->Data1 - 0xd5a47fa7)
  606. #define DEFINE_MMREG_MID_GUID(id)\
  607.     0xd5a47fa7+(USHORT)(id), 0x6d98, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  608.  
  609. #define IS_COMPATIBLE_MMREG_MID(guid)\
  610.     (((guid)->Data1 >= 0xd5a47fa7) &&\
  611.     ((guid)->Data1 < 0xd5a47fa7 + 0xffff) &&\
  612.     ((guid)->Data2 == 0x6d98) &&\
  613.     ((guid)->Data3 == 0x11d1) &&\
  614.     ((guid)->Data4[0] == 0xa2) &&\
  615.     ((guid)->Data4[1] == 0x1a) &&\
  616.     ((guid)->Data4[2] == 0x00) &&\
  617.     ((guid)->Data4[3] == 0xa0) &&\
  618.     ((guid)->Data4[4] == 0xc9) &&\
  619.     ((guid)->Data4[5] == 0x22) &&\
  620.     ((guid)->Data4[6] == 0x31) &&\
  621.     ((guid)->Data4[7] == 0x96))
  622. #endif // !defined(INIT_MMREG_MID)
  623.  
  624. #if !defined(INIT_MMREG_PID)
  625. //{e36dc2ac-6d9a-11d1-a21a-00a0c9223196}
  626. #define INIT_MMREG_PID(guid, id)\
  627. {\
  628.     (guid)->Data1 = 0xe36dc2ac + (USHORT)(id);\
  629.     (guid)->Data2 = 0x6d9a;\
  630.     (guid)->Data3 = 0x11d1;\
  631.     (guid)->Data4[0] = 0xa2;\
  632.     (guid)->Data4[1] = 0x1a;\
  633.     (guid)->Data4[2] = 0x00;\
  634.     (guid)->Data4[3] = 0xa0;\
  635.     (guid)->Data4[4] = 0xc9;\
  636.     (guid)->Data4[5] = 0x22;\
  637.     (guid)->Data4[6] = 0x31;\
  638.     (guid)->Data4[7] = 0x96;\
  639. }
  640. #define EXTRACT_MMREG_PID(guid)\
  641.     (USHORT)((guid)->Data1 - 0xe36dc2ac)
  642. #define DEFINE_MMREG_PID_GUID(id)\
  643.     0xe36dc2ac+(USHORT)(id), 0x6d9a, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  644.  
  645. #define IS_COMPATIBLE_MMREG_PID(guid)\
  646.     (((guid)->Data1 >= 0xe36dc2ac) &&\
  647.     ((guid)->Data1 < 0xe36dc2ac + 0xffff) &&\
  648.     ((guid)->Data2 == 0x6d9a) &&\
  649.     ((guid)->Data3 == 0x11d1) &&\
  650.     ((guid)->Data4[0] == 0xa2) &&\
  651.     ((guid)->Data4[1] == 0x1a) &&\
  652.     ((guid)->Data4[2] == 0x00) &&\
  653.     ((guid)->Data4[3] == 0xa0) &&\
  654.     ((guid)->Data4[4] == 0xc9) &&\
  655.     ((guid)->Data4[5] == 0x22) &&\
  656.     ((guid)->Data4[6] == 0x31) &&\
  657.     ((guid)->Data4[7] == 0x96))
  658. #endif // !defined(INIT_MMREG_PID)
  659.  
  660. #define STATIC_KSDATAFORMAT_SUBTYPE_ANALOG\
  661.     0x6dba3190L, 0x67bd, 0x11cf, 0xa0, 0xf7, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  662. DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4", KSDATAFORMAT_SUBTYPE_ANALOG);
  663. #define KSDATAFORMAT_SUBTYPE_ANALOG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ANALOG)
  664.  
  665. #define STATIC_KSDATAFORMAT_SUBTYPE_PCM\
  666.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM)
  667. DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_PCM);
  668. #define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM)
  669.  
  670. #if defined(_INC_MMREG)
  671. #define STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\
  672.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_IEEE_FLOAT)
  673. DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
  674. #define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)
  675.  
  676. #define STATIC_KSDATAFORMAT_SUBTYPE_DRM\
  677.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DRM)
  678. DEFINE_GUIDSTRUCT("00000009-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_DRM);
  679. #define KSDATAFORMAT_SUBTYPE_DRM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DRM)
  680.  
  681. #define STATIC_KSDATAFORMAT_SUBTYPE_ALAW\
  682.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ALAW)
  683. DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ALAW);
  684. #define KSDATAFORMAT_SUBTYPE_ALAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ALAW)
  685.  
  686. #define STATIC_KSDATAFORMAT_SUBTYPE_MULAW\
  687.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MULAW)
  688. DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MULAW);
  689. #define KSDATAFORMAT_SUBTYPE_MULAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MULAW)
  690.  
  691. #define STATIC_KSDATAFORMAT_SUBTYPE_ADPCM\
  692.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ADPCM)
  693. DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ADPCM);
  694. #define KSDATAFORMAT_SUBTYPE_ADPCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ADPCM)
  695.  
  696. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG\
  697.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MPEG)
  698. DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MPEG);
  699. #define KSDATAFORMAT_SUBTYPE_MPEG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG)
  700. #endif // defined(_INC_MMREG)
  701.  
  702. #define STATIC_KSDATAFORMAT_SPECIFIER_VC_ID\
  703.     0xAD98D184L, 0xAAC3, 0x11D0, 0xA4, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  704. DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196", KSDATAFORMAT_SPECIFIER_VC_ID);
  705. #define KSDATAFORMAT_SPECIFIER_VC_ID DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VC_ID)
  706.  
  707. #define STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX\
  708.     0x05589f81L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  709. DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_WAVEFORMATEX);
  710. #define KSDATAFORMAT_SPECIFIER_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
  711.  
  712. #define STATIC_KSDATAFORMAT_SPECIFIER_DSOUND\
  713.     0x518590a2L, 0xa184, 0x11d0, 0x85, 0x22, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  714. DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3", KSDATAFORMAT_SPECIFIER_DSOUND);
  715. #define KSDATAFORMAT_SPECIFIER_DSOUND DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DSOUND)
  716.  
  717. #if defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
  718. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  719. #include <pshpack1.h>
  720. #endif
  721. typedef struct {
  722.     KSDATAFORMAT    DataFormat;
  723.     WAVEFORMATEX    WaveFormatEx;
  724. } KSDATAFORMAT_WAVEFORMATEX, *PKSDATAFORMAT_WAVEFORMATEX;
  725.  
  726. #ifndef _WAVEFORMATEXTENSIBLE_
  727. #define _WAVEFORMATEXTENSIBLE_
  728. typedef struct {
  729.     WAVEFORMATEX    Format;
  730.     union {
  731.         WORD wValidBitsPerSample;       /* bits of precision  */
  732.         WORD wSamplesPerBlock;          /* valid if wBitsPerSample==0 */
  733.         WORD wReserved;                 /* If neither applies, set to zero. */
  734.     } Samples;
  735.     DWORD           dwChannelMask;      /* which channels are */
  736.                                         /* present in stream  */
  737.     GUID            SubFormat;
  738. } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
  739. #endif // !_WAVEFORMATEXTENSIBLE_
  740.  
  741. #if !defined(WAVE_FORMAT_EXTENSIBLE)
  742. #define  WAVE_FORMAT_EXTENSIBLE                 0xFFFE
  743. #endif // !defined(WAVE_FORMAT_EXTENSIBLE)
  744.  
  745. // DirectSound buffer description
  746. typedef struct {
  747.     ULONG               Flags;
  748.     ULONG               Control;
  749.     WAVEFORMATEX        WaveFormatEx;
  750. } KSDSOUND_BUFFERDESC, *PKSDSOUND_BUFFERDESC;
  751.  
  752. // DirectSound format
  753. typedef struct {
  754.     KSDATAFORMAT        DataFormat;
  755.     KSDSOUND_BUFFERDESC BufferDesc;
  756. } KSDATAFORMAT_DSOUND, *PKSDATAFORMAT_DSOUND;
  757.  
  758. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  759. #include <poppack.h>
  760. #endif
  761. #endif // defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
  762.  
  763.  
  764.  
  765. // DirectSound buffer flags
  766. #define KSDSOUND_BUFFER_PRIMARY             0x00000001
  767. #define KSDSOUND_BUFFER_STATIC              0x00000002
  768. #define KSDSOUND_BUFFER_LOCHARDWARE         0x00000004
  769. #define KSDSOUND_BUFFER_LOCSOFTWARE         0x00000008
  770.  
  771. // DirectSound buffer control flags
  772. #define KSDSOUND_BUFFER_CTRL_3D             0x00000001
  773. #define KSDSOUND_BUFFER_CTRL_FREQUENCY      0x00000002
  774. #define KSDSOUND_BUFFER_CTRL_PAN            0x00000004
  775. #define KSDSOUND_BUFFER_CTRL_VOLUME         0x00000008
  776. #define KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY 0x00000010
  777.  
  778. typedef struct {
  779. #if defined(_NTDDK_)
  780.     ULONGLONG        PlayOffset;
  781.     ULONGLONG        WriteOffset;
  782. #else // !_NTDDK_
  783.     DWORDLONG        PlayOffset;
  784.     DWORDLONG        WriteOffset;
  785. #endif // !_NTDDK_
  786. } KSAUDIO_POSITION, *PKSAUDIO_POSITION;
  787.  
  788. //===========================================================================
  789. // DirectSound3D HAL
  790.  
  791.  
  792. typedef struct _DS3DVECTOR {
  793.     union {
  794.         FLOAT x;
  795.         FLOAT dvX;
  796.     };
  797.     union {
  798.         FLOAT y;
  799.         FLOAT dvY;
  800.     };
  801.     union {
  802.         FLOAT z;
  803.         FLOAT dvZ;
  804.     };
  805. } DS3DVECTOR, *PDS3DVECTOR;
  806.  
  807.  
  808. //===========================================================================
  809. //===========================================================================
  810.  
  811. // KSPROPSETID_DirectSound3DListener : {437B3414-D060-11d0-8583-00C04FD9BAF3}
  812.  
  813. #define STATIC_KSPROPSETID_DirectSound3DListener\
  814.     0x437b3414L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  815. DEFINE_GUIDSTRUCT("437b3414-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DListener);
  816. #define KSPROPSETID_DirectSound3DListener DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DListener)
  817.  
  818. typedef enum {
  819.     KSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
  820.     KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
  821.     KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
  822.     KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
  823.     KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
  824.     KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
  825.     KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
  826.     KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
  827.     KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
  828. } KSPROPERTY_DIRECTSOUND3DLISTENER;
  829.  
  830. typedef struct {
  831.     DS3DVECTOR  Position;
  832.     DS3DVECTOR  Velocity;
  833.     DS3DVECTOR  OrientFront;
  834.     DS3DVECTOR  OrientTop;
  835.     FLOAT       DistanceFactor;
  836.     FLOAT       RolloffFactor;
  837.     FLOAT       DopplerFactor;
  838. } KSDS3D_LISTENER_ALL, *PKSDS3D_LISTENER_ALL;
  839.  
  840. typedef struct {
  841.     DS3DVECTOR  Front;
  842.     DS3DVECTOR  Top;
  843. } KSDS3D_LISTENER_ORIENTATION, *PKSDS3D_LISTENER_ORIENTATION;
  844.  
  845.  
  846. //===========================================================================
  847. //===========================================================================
  848. // KSPROPSETID_DirectSound3DBuffer : {437B3411-D060-11d0-8583-00C04FD9BAF3}
  849.  
  850. #define STATIC_KSPROPSETID_DirectSound3DBuffer\
  851.     0x437b3411L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  852. DEFINE_GUIDSTRUCT("437b3411-d060-11d0-8583-00c04fd9baf3", KSPROPSETID_DirectSound3DBuffer);
  853. #define KSPROPSETID_DirectSound3DBuffer DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DBuffer)
  854.  
  855.  
  856. typedef enum {
  857.     KSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
  858.     KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
  859.     KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
  860.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
  861.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
  862.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
  863.     KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
  864.     KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
  865.     KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
  866. } KSPROPERTY_DIRECTSOUND3DBUFFER;
  867.  
  868.  
  869. typedef struct {
  870.     DS3DVECTOR  Position;
  871.     DS3DVECTOR  Velocity;
  872.     ULONG       InsideConeAngle;
  873.     ULONG       OutsideConeAngle;
  874.     DS3DVECTOR  ConeOrientation;
  875.     LONG        ConeOutsideVolume;
  876.     FLOAT       MinDistance;
  877.     FLOAT       MaxDistance;
  878.     ULONG       Mode;
  879. } KSDS3D_BUFFER_ALL, *PKSDS3D_BUFFER_ALL;
  880.  
  881. typedef struct {
  882.     ULONG  InsideConeAngle;
  883.     ULONG  OutsideConeAngle;
  884. } KSDS3D_BUFFER_CONE_ANGLES, *PKSDS3D_BUFFER_CONE_ANGLES;
  885.  
  886. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE   (-1)
  887. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN         5
  888. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW      10
  889. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE        20
  890. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX         180
  891.  
  892. #define KSDSOUND_3D_MODE_NORMAL          0x00000000
  893. #define KSDSOUND_3D_MODE_HEADRELATIVE    0x00000001
  894. #define KSDSOUND_3D_MODE_DISABLE         0x00000002
  895.  
  896. typedef struct {
  897.    KSDATARANGE              DataRange;
  898.    ULONG                    MaximumChannels;
  899.    ULONG                    MinimumBitsPerSample;
  900.    ULONG                    MaximumBitsPerSample;
  901.    ULONG                    MinimumSampleFrequency;
  902.    ULONG                    MaximumSampleFrequency;
  903. } KSDATARANGE_AUDIO, *PKSDATARANGE_AUDIO;
  904.  
  905. //---------------------------------------------------------------------------
  906.  
  907. #define STATIC_KSDATAFORMAT_SUBTYPE_RIFF\
  908.     0x4995DAEEL, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  909. DEFINE_GUIDSTRUCT("4995DAEE-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFF);
  910. #define KSDATAFORMAT_SUBTYPE_RIFF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFF)
  911.  
  912. #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFWAVE\
  913.     0xe436eb8bL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  914. DEFINE_GUIDSTRUCT("e436eb8b-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_RIFFWAVE);
  915. #define KSDATAFORMAT_SUBTYPE_RIFFWAVE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFWAVE)
  916.  
  917. //===========================================================================
  918. //===========================================================================
  919.  
  920. #define STATIC_KSPROPSETID_Bibliographic \
  921.     0x07BA150EL, 0xE2B1, 0x11D0, 0xAC, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  922. DEFINE_GUIDSTRUCT("07BA150E-E2B1-11D0-AC17-00A0C9223196", KSPROPSETID_Bibliographic);
  923. #define KSPROPSETID_Bibliographic DEFINE_GUIDNAMED(KSPROPSETID_Bibliographic)
  924.  
  925. //Repeatable tags contain all entries within the property, each preceeded by length
  926. typedef enum {
  927.     KSPROPERTY_BIBLIOGRAPHIC_LEADER = 'RDL ',
  928.     KSPROPERTY_BIBLIOGRAPHIC_LCCN = '010 ',
  929.     KSPROPERTY_BIBLIOGRAPHIC_ISBN = '020 ',
  930.     KSPROPERTY_BIBLIOGRAPHIC_ISSN = '220 ',
  931.     KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE = '040 ',
  932.     KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME = '001 ',
  933.     KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY = '011 ',
  934.     KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME = '111 ',
  935.     KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE = '031 ',
  936.     KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE = '042 ',
  937.     KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT = '542 ',
  938.     KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE = '642 ',
  939.     KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION = '062 ',
  940.     KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION = '003 ',
  941.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE = '044 ',
  942.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT = '094 ',
  943.     KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE = '005 ',
  944.     KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE = '405 ',
  945.     KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE = '505 ',
  946.     KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT = '805 ',
  947.     KSPROPERTY_BIBLIOGRAPHIC_CITATION = '015 ',
  948.     KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT = '115 ',
  949.     KSPROPERTY_BIBLIOGRAPHIC_SUMMARY = '025 ',
  950.     KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE = '125 ',
  951.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE = '035 ',
  952.     KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS = '835 ',
  953.     KSPROPERTY_BIBLIOGRAPHIC_AWARDS = '685 ',
  954.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME = '006 ',
  955.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM = '056 ',
  956.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC = '156 ',
  957.     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE = '556 ',
  958.     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM = '856 ',
  959.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE = '037 ',
  960.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED = '047 ',
  961.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ',
  962.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 '
  963. } KSPROPERTY_BIBLIOGRAPHIC;
  964.  
  965. #define STATIC_KSPROPSETID_TopologyNode\
  966.     0x45FFAAA1L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  967. DEFINE_GUIDSTRUCT("45FFAAA1-6E1B-11D0-BCF2-444553540000", KSPROPSETID_TopologyNode);
  968. #define KSPROPSETID_TopologyNode DEFINE_GUIDNAMED(KSPROPSETID_TopologyNode)
  969.  
  970. typedef enum {
  971.     KSPROPERTY_TOPOLOGYNODE_ENABLE = 1,
  972.     KSPROPERTY_TOPOLOGYNODE_RESET
  973. } KSPROPERTY_TOPOLOGYNODE;
  974.  
  975. //===========================================================================
  976.  
  977. #if defined(_NTDDK_)
  978. typedef NTSTATUS (CALLBACK *PRTAUDIOGETPOSITION)(IN PFILE_OBJECT PinFileObject,
  979.                                                  OUT PUCHAR *ppPlayPosition,
  980.                                                  OUT PLONG plOffset);
  981. #endif // defined(_NTDDK_)
  982.  
  983. #define STATIC_KSPROPSETID_RtAudio\
  984.     0xa855a48c, 0x2f78, 0x4729, 0x90, 0x51, 0x19, 0x68, 0x74, 0x6b, 0x9e, 0xef
  985. DEFINE_GUIDSTRUCT("A855A48C-2F78-4729-9051-1968746B9EEF", KSPROPSETID_RtAudio);
  986. #define KSPROPSETID_RtAudio DEFINE_GUIDNAMED(KSPROPSETID_RtAudio)
  987.  
  988. typedef enum {
  989.     KSPROPERTY_RTAUDIO_GETPOSITIONFUNCTION
  990. } KSPROPERTY_RTAUDIO;
  991.  
  992. //===========================================================================
  993. #define STATIC_KSPROPSETID_DrmAudioStream\
  994.     0x2f2c8ddd, 0x4198, 0x4fac, 0xba, 0x29, 0x61, 0xbb, 0x5, 0xb7, 0xde, 0x6
  995. DEFINE_GUIDSTRUCT("2F2C8DDD-4198-4fac-BA29-61BB05B7DE06", KSPROPSETID_DrmAudioStream);
  996. #define KSPROPSETID_DrmAudioStream DEFINE_GUIDNAMED(KSPROPSETID_DrmAudioStream)
  997.  
  998. typedef enum {
  999.     KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
  1000. } KSPROPERTY_DRMAUDIOSTREAM;
  1001.  
  1002. //===========================================================================
  1003. #define STATIC_KSPROPSETID_Audio\
  1004.     0x45FFAAA0L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  1005. DEFINE_GUIDSTRUCT("45FFAAA0-6E1B-11D0-BCF2-444553540000", KSPROPSETID_Audio);
  1006. #define KSPROPSETID_Audio DEFINE_GUIDNAMED(KSPROPSETID_Audio)
  1007.  
  1008. typedef enum {
  1009.     KSPROPERTY_AUDIO_LATENCY = 1,
  1010.     KSPROPERTY_AUDIO_COPY_PROTECTION,
  1011.     KSPROPERTY_AUDIO_CHANNEL_CONFIG,
  1012.     KSPROPERTY_AUDIO_VOLUMELEVEL,
  1013.     KSPROPERTY_AUDIO_POSITION,
  1014.     KSPROPERTY_AUDIO_DYNAMIC_RANGE,
  1015.     KSPROPERTY_AUDIO_QUALITY,
  1016.     KSPROPERTY_AUDIO_SAMPLING_RATE,
  1017.     KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE,
  1018.     KSPROPERTY_AUDIO_MIX_LEVEL_TABLE,
  1019.     KSPROPERTY_AUDIO_MIX_LEVEL_CAPS,
  1020.     KSPROPERTY_AUDIO_MUX_SOURCE,
  1021.     KSPROPERTY_AUDIO_MUTE,
  1022.     KSPROPERTY_AUDIO_BASS,
  1023.     KSPROPERTY_AUDIO_MID,
  1024.     KSPROPERTY_AUDIO_TREBLE,
  1025.     KSPROPERTY_AUDIO_BASS_BOOST,
  1026.     KSPROPERTY_AUDIO_EQ_LEVEL,
  1027.     KSPROPERTY_AUDIO_NUM_EQ_BANDS,
  1028.     KSPROPERTY_AUDIO_EQ_BANDS,
  1029.     KSPROPERTY_AUDIO_AGC,
  1030.     KSPROPERTY_AUDIO_DELAY,
  1031.     KSPROPERTY_AUDIO_LOUDNESS,
  1032.     KSPROPERTY_AUDIO_WIDE_MODE,
  1033.     KSPROPERTY_AUDIO_WIDENESS,
  1034.     KSPROPERTY_AUDIO_REVERB_LEVEL,
  1035.     KSPROPERTY_AUDIO_CHORUS_LEVEL,
  1036.     KSPROPERTY_AUDIO_DEV_SPECIFIC,
  1037.     KSPROPERTY_AUDIO_DEMUX_DEST,
  1038.     KSPROPERTY_AUDIO_STEREO_ENHANCE,
  1039.     KSPROPERTY_AUDIO_MANUFACTURE_GUID,
  1040.     KSPROPERTY_AUDIO_PRODUCT_GUID,
  1041.     KSPROPERTY_AUDIO_CPU_RESOURCES,
  1042.     KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY,
  1043.     KSPROPERTY_AUDIO_SURROUND_ENCODE,
  1044.     KSPROPERTY_AUDIO_3D_INTERFACE,
  1045.     KSPROPERTY_AUDIO_PEAKMETER,
  1046.     KSPROPERTY_AUDIO_ALGORITHM_INSTANCE,
  1047.     KSPROPERTY_AUDIO_FILTER_STATE,
  1048.     KSPROPERTY_AUDIO_PREFERRED_STATUS
  1049. } KSPROPERTY_AUDIO;
  1050.  
  1051. // Audio quality constants
  1052. #define KSAUDIO_QUALITY_WORST               0x0
  1053. #define KSAUDIO_QUALITY_PC                  0x1
  1054. #define KSAUDIO_QUALITY_BASIC               0x2
  1055. #define KSAUDIO_QUALITY_ADVANCED            0x3
  1056.  
  1057. // Audio CPU resource constants
  1058. #define KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU  0x00000000
  1059. #define KSAUDIO_CPU_RESOURCES_HOST_CPU      0x7FFFFFFF
  1060.  
  1061. typedef struct {
  1062.     BOOL    fCopyrighted;
  1063.     BOOL    fOriginal;
  1064. } KSAUDIO_COPY_PROTECTION, *PKSAUDIO_COPY_PROTECTION;
  1065.  
  1066. typedef struct {
  1067.     LONG    ActiveSpeakerPositions;
  1068. } KSAUDIO_CHANNEL_CONFIG, *PKSAUDIO_CHANNEL_CONFIG;
  1069.  
  1070. // Speaker Positions:
  1071. #define SPEAKER_FRONT_LEFT              0x1
  1072. #define SPEAKER_FRONT_RIGHT             0x2
  1073. #define SPEAKER_FRONT_CENTER            0x4
  1074. #define SPEAKER_LOW_FREQUENCY           0x8
  1075. #define SPEAKER_BACK_LEFT               0x10
  1076. #define SPEAKER_BACK_RIGHT              0x20
  1077. #define SPEAKER_FRONT_LEFT_OF_CENTER    0x40
  1078. #define SPEAKER_FRONT_RIGHT_OF_CENTER   0x80
  1079. #define SPEAKER_BACK_CENTER             0x100
  1080. #define SPEAKER_SIDE_LEFT               0x200
  1081. #define SPEAKER_SIDE_RIGHT              0x400
  1082. #define SPEAKER_TOP_CENTER              0x800
  1083. #define SPEAKER_TOP_FRONT_LEFT          0x1000
  1084. #define SPEAKER_TOP_FRONT_CENTER        0x2000
  1085. #define SPEAKER_TOP_FRONT_RIGHT         0x4000
  1086. #define SPEAKER_TOP_BACK_LEFT           0x8000
  1087. #define SPEAKER_TOP_BACK_CENTER         0x10000
  1088. #define SPEAKER_TOP_BACK_RIGHT          0x20000
  1089.  
  1090. // Bit mask locations reserved for future use
  1091. #define SPEAKER_RESERVED                0x7FFC0000
  1092.  
  1093. // Used to specify that any possible permutation of speaker configurations
  1094. #define SPEAKER_ALL                     0x80000000
  1095.  
  1096. // DirectSound Speaker Config
  1097. #define KSAUDIO_SPEAKER_DIRECTOUT       0
  1098. #define KSAUDIO_SPEAKER_MONO            (SPEAKER_FRONT_CENTER)
  1099. #define KSAUDIO_SPEAKER_STEREO          (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
  1100. #define KSAUDIO_SPEAKER_QUAD            (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  1101.                                          SPEAKER_BACK_LEFT  | SPEAKER_BACK_RIGHT)
  1102. #define KSAUDIO_SPEAKER_SURROUND        (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  1103.                                          SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
  1104. #define KSAUDIO_SPEAKER_5POINT1         (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  1105.                                          SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
  1106.                                          SPEAKER_BACK_LEFT  | SPEAKER_BACK_RIGHT)
  1107. #define KSAUDIO_SPEAKER_7POINT1         (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  1108.                                          SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
  1109.                                          SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \
  1110.                                          SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
  1111.  
  1112. // DVD Speaker Positions
  1113. #define KSAUDIO_SPEAKER_GROUND_FRONT_LEFT   SPEAKER_FRONT_LEFT
  1114. #define KSAUDIO_SPEAKER_GROUND_FRONT_CENTER SPEAKER_FRONT_CENTER
  1115. #define KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT  SPEAKER_FRONT_RIGHT
  1116. #define KSAUDIO_SPEAKER_GROUND_REAR_LEFT    SPEAKER_BACK_LEFT
  1117. #define KSAUDIO_SPEAKER_GROUND_REAR_RIGHT   SPEAKER_BACK_RIGHT
  1118. #define KSAUDIO_SPEAKER_TOP_MIDDLE          SPEAKER_TOP_CENTER
  1119. #define KSAUDIO_SPEAKER_SUPER_WOOFER        SPEAKER_LOW_FREQUENCY
  1120.  
  1121. typedef struct {
  1122.     ULONG   QuietCompression;
  1123.     ULONG   LoudCompression;
  1124. } KSAUDIO_DYNAMIC_RANGE, *PKSAUDIO_DYNAMIC_RANGE;
  1125.  
  1126. typedef struct {
  1127.     BOOL    Mute;
  1128.     LONG    Level;
  1129. } KSAUDIO_MIXLEVEL, *PKSAUDIO_MIXLEVEL;
  1130.  
  1131. typedef struct {
  1132.     BOOL    Mute;
  1133.     LONG    Minimum;
  1134.     LONG    Maximum;
  1135.     LONG    Reset;
  1136. } KSAUDIO_MIX_CAPS, *PKSAUDIO_MIX_CAPS;
  1137.  
  1138. typedef struct {
  1139.     ULONG               InputChannels;
  1140.     ULONG               OutputChannels;
  1141.     KSAUDIO_MIX_CAPS    Capabilities[1];
  1142. } KSAUDIO_MIXCAP_TABLE, *PKSAUDIO_MIXCAP_TABLE;
  1143.  
  1144. typedef enum {
  1145.     SE_TECH_NONE,
  1146.     SE_TECH_ANALOG_DEVICES_PHAT,
  1147.     SE_TECH_CREATIVE,
  1148.     SE_TECH_NATIONAL_SEMI,
  1149.     SE_TECH_YAMAHA_YMERSION,
  1150.     SE_TECH_BBE,
  1151.     SE_TECH_CRYSTAL_SEMI,
  1152.     SE_TECH_QSOUND_QXPANDER,
  1153.     SE_TECH_SPATIALIZER,
  1154.     SE_TECH_SRS,
  1155.     SE_TECH_PLATFORM_TECH,
  1156.     SE_TECH_AKM,
  1157.     SE_TECH_AUREAL,
  1158.     SE_TECH_AZTECH,
  1159.     SE_TECH_BINAURA,
  1160.     SE_TECH_ESS_TECH,
  1161.     SE_TECH_HARMAN_VMAX,
  1162.     SE_TECH_NVIDEA,
  1163.     SE_TECH_PHILIPS_INCREDIBLE,
  1164.     SE_TECH_TEXAS_INST,
  1165.     SE_TECH_VLSI_TECH
  1166. } SE_TECHNIQUE;
  1167.  
  1168. typedef struct {
  1169.     SE_TECHNIQUE    Technique;
  1170.     ULONG   Center;
  1171.     ULONG   Depth;
  1172.     ULONG   Reserved;
  1173. } KSAUDIO_STEREO_ENHANCE, *PKSAUDIO_STEREO_ENHANCE;
  1174.  
  1175. typedef enum {              // preferred device index
  1176.     KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT = 0,
  1177.     KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT,
  1178.     KSPROPERTY_SYSAUDIO_RECORD_DEFAULT,
  1179.     KSPROPERTY_SYSAUDIO_MIDI_DEFAULT,
  1180.     KSPROPERTY_SYSAUDIO_MIXER_DEFAULT
  1181. } KSPROPERTY_SYSAUDIO_DEFAULT_TYPE;
  1182.  
  1183. typedef struct {
  1184.     BOOL                             Enable;
  1185.     KSPROPERTY_SYSAUDIO_DEFAULT_TYPE DeviceType;
  1186.     ULONG                            Flags;
  1187.     ULONG                            Reserved;
  1188. } KSAUDIO_PREFERRED_STATUS, *PKSAUDIO_PREFERRED_STATUS;
  1189. //===========================================================================
  1190. // Topology Node Type GUIDs
  1191.  
  1192. #define STATIC_KSNODETYPE_DAC\
  1193.     0x507AE360L, 0xC554, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1194. DEFINE_GUIDSTRUCT("507AE360-C554-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DAC);
  1195. #define KSNODETYPE_DAC DEFINE_GUIDNAMED(KSNODETYPE_DAC)
  1196.  
  1197. #define STATIC_KSNODETYPE_ADC\
  1198.     0x4D837FE0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1199. DEFINE_GUIDSTRUCT("4D837FE0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_ADC);
  1200. #define KSNODETYPE_ADC DEFINE_GUIDNAMED(KSNODETYPE_ADC)
  1201.  
  1202. #define STATIC_KSNODETYPE_SRC\
  1203.     0x9DB7B9E0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1204. DEFINE_GUIDSTRUCT("9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SRC);
  1205. #define KSNODETYPE_SRC DEFINE_GUIDNAMED(KSNODETYPE_SRC)
  1206.  
  1207. #define STATIC_KSNODETYPE_SUPERMIX\
  1208.     0xE573ADC0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1209. DEFINE_GUIDSTRUCT("E573ADC0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUPERMIX);
  1210. #define KSNODETYPE_SUPERMIX DEFINE_GUIDNAMED(KSNODETYPE_SUPERMIX)
  1211.  
  1212. #define STATIC_KSNODETYPE_MUX\
  1213.     0x2CEAF780L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1214. DEFINE_GUIDSTRUCT("2CEAF780-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUX);
  1215. #define KSNODETYPE_MUX DEFINE_GUIDNAMED(KSNODETYPE_MUX)
  1216.  
  1217. #define STATIC_KSNODETYPE_DEMUX\
  1218.     0xC0EB67D4L, 0xE807, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1219. DEFINE_GUIDSTRUCT("C0EB67D4-E807-11D0-958A-00C04FB925D3", KSNODETYPE_DEMUX);
  1220. #define KSNODETYPE_DEMUX DEFINE_GUIDNAMED(KSNODETYPE_DEMUX)
  1221.  
  1222. #define STATIC_KSNODETYPE_SUM\
  1223.     0xDA441A60L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1224. DEFINE_GUIDSTRUCT("DA441A60-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUM);
  1225. #define KSNODETYPE_SUM DEFINE_GUIDNAMED(KSNODETYPE_SUM)
  1226.  
  1227. #define STATIC_KSNODETYPE_MUTE\
  1228.     0x02B223C0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1229. DEFINE_GUIDSTRUCT("02B223C0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUTE);
  1230. #define KSNODETYPE_MUTE DEFINE_GUIDNAMED(KSNODETYPE_MUTE)
  1231.  
  1232. #define STATIC_KSNODETYPE_VOLUME\
  1233.     0x3A5ACC00L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1234. DEFINE_GUIDSTRUCT("3A5ACC00-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_VOLUME);
  1235. #define KSNODETYPE_VOLUME DEFINE_GUIDNAMED(KSNODETYPE_VOLUME)
  1236.  
  1237. #define STATIC_KSNODETYPE_TONE\
  1238.     0x7607E580L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1239. DEFINE_GUIDSTRUCT("7607E580-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_TONE);
  1240. #define KSNODETYPE_TONE DEFINE_GUIDNAMED(KSNODETYPE_TONE)
  1241.  
  1242. #define STATIC_KSNODETYPE_EQUALIZER\
  1243.     0x9D41B4A0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1244. DEFINE_GUIDSTRUCT("9D41B4A0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_EQUALIZER);
  1245. #define KSNODETYPE_EQUALIZER DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZER)
  1246.  
  1247. #define STATIC_KSNODETYPE_AGC\
  1248.     0xE88C9BA0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1249. DEFINE_GUIDSTRUCT("E88C9BA0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_AGC);
  1250. #define KSNODETYPE_AGC DEFINE_GUIDNAMED(KSNODETYPE_AGC)
  1251.  
  1252. #define STATIC_KSNODETYPE_NOISE_SUPPRESS\
  1253.     0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5
  1254. DEFINE_GUIDSTRUCT("E07F903F-62FD-4e60-8CDD-DEA7236665B5", KSNODETYPE_NOISE_SUPPRESS);
  1255. #define KSNODETYPE_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSNODETYPE_NOISE_SUPPRESS)
  1256.  
  1257. #define STATIC_KSNODETYPE_DELAY\
  1258.     0x144981E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1259. DEFINE_GUIDSTRUCT("144981E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DELAY);
  1260. #define KSNODETYPE_DELAY DEFINE_GUIDNAMED(KSNODETYPE_DELAY)
  1261.  
  1262. #define STATIC_KSNODETYPE_LOUDNESS\
  1263.     0x41887440L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1264. DEFINE_GUIDSTRUCT("41887440-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_LOUDNESS);
  1265. #define KSNODETYPE_LOUDNESS DEFINE_GUIDNAMED(KSNODETYPE_LOUDNESS)
  1266.  
  1267. #define STATIC_KSNODETYPE_PROLOGIC_DECODER\
  1268.     0x831C2C80L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1269. DEFINE_GUIDSTRUCT("831C2C80-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_PROLOGIC_DECODER);
  1270. #define KSNODETYPE_PROLOGIC_DECODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_DECODER)
  1271.  
  1272. #define STATIC_KSNODETYPE_STEREO_WIDE\
  1273.     0xA9E69800L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1274. DEFINE_GUIDSTRUCT("A9E69800-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_STEREO_WIDE);
  1275. #define KSNODETYPE_STEREO_WIDE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_WIDE)
  1276.  
  1277. #define STATIC_KSNODETYPE_STEREO_ENHANCE\
  1278.     0xAF6878ACL, 0xE83F, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1279. DEFINE_GUIDSTRUCT("AF6878AC-E83F-11D0-958A-00C04FB925D3", KSNODETYPE_STEREO_ENHANCE);
  1280. #define KSNODETYPE_STEREO_ENHANCE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_ENHANCE)
  1281.  
  1282. #define STATIC_KSNODETYPE_REVERB\
  1283.     0xEF0328E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1284. DEFINE_GUIDSTRUCT("EF0328E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_REVERB);
  1285. #define KSNODETYPE_REVERB DEFINE_GUIDNAMED(KSNODETYPE_REVERB)
  1286.  
  1287. #define STATIC_KSNODETYPE_CHORUS\
  1288.     0x20173F20L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1289. DEFINE_GUIDSTRUCT("20173F20-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_CHORUS);
  1290. #define KSNODETYPE_CHORUS DEFINE_GUIDNAMED(KSNODETYPE_CHORUS)
  1291.  
  1292. #define STATIC_KSNODETYPE_3D_EFFECTS\
  1293.     0x55515860L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1294. DEFINE_GUIDSTRUCT("55515860-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_3D_EFFECTS);
  1295. #define KSNODETYPE_3D_EFFECTS DEFINE_GUIDNAMED(KSNODETYPE_3D_EFFECTS)
  1296.  
  1297. #define STATIC_KSNODETYPE_ACOUSTIC_ECHO_CANCEL STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL
  1298. #define KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSCATEGORY_ACOUSTIC_ECHO_CANCEL
  1299.  
  1300. #define STATIC_KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL\
  1301.     0x1c22c56dL, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10
  1302. DEFINE_GUIDSTRUCT("1C22C56D-9879-4f5b-A389-27996DDC2810", KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL);
  1303. #define KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL)
  1304.  
  1305. #define STATIC_KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS\
  1306.     0x5ab0882eL, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0
  1307. DEFINE_GUIDSTRUCT("5AB0882E-7274-4516-877D-4EEE99BA4FD0", KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS);
  1308. #define KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS)
  1309.  
  1310. #define STATIC_KSALGORITHMINSTANCE_SYSTEM_AGC\
  1311.     0x950e55b9L, 0x877c, 0x4c67, 0xbe, 0x8, 0xe4, 0x7b, 0x56, 0x11, 0x13, 0xa
  1312. DEFINE_GUIDSTRUCT("950E55B9-877C-4c67-BE08-E47B5611130A", KSALGORITHMINSTANCE_SYSTEM_AGC);
  1313. #define KSALGORITHMINSTANCE_SYSTEM_AGC DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_AGC)
  1314.  
  1315. #define STATIC_KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR\
  1316.     0xB6F5A0A0L, 0x9E61, 0x4F8C, 0x91, 0xE3, 0x76, 0xCF, 0xF, 0x3C, 0x47, 0x1F
  1317. DEFINE_GUIDSTRUCT("B6F5A0A0-9E61-4f8c-91E3-76CF0F3C471F", KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR);
  1318. #define KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR)
  1319.  
  1320.  
  1321. #define STATIC_KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
  1322. #define KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
  1323.  
  1324. #define STATIC_KSNODETYPE_DEV_SPECIFIC\
  1325.     0x941C7AC0L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1326. DEFINE_GUIDSTRUCT("941C7AC0-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DEV_SPECIFIC);
  1327. #define KSNODETYPE_DEV_SPECIFIC DEFINE_GUIDNAMED(KSNODETYPE_DEV_SPECIFIC)
  1328.  
  1329. #define STATIC_KSNODETYPE_PROLOGIC_ENCODER\
  1330.     0x8074C5B2L, 0x3C66, 0x11D2, 0xB4, 0x5A, 0x30, 0x78, 0x30, 0x2C, 0x20, 0x30
  1331. DEFINE_GUIDSTRUCT("8074C5B2-3C66-11D2-B45A-3078302C2030", KSNODETYPE_PROLOGIC_ENCODER);
  1332. #define KSNODETYPE_PROLOGIC_ENCODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_ENCODER)
  1333. #define KSNODETYPE_SURROUND_ENCODER KSNODETYPE_PROLOGIC_ENCODER
  1334.  
  1335. #define STATIC_KSNODETYPE_PEAKMETER\
  1336.     0xa085651eL, 0x5f0d, 0x4b36, 0xa8, 0x69, 0xd1, 0x95, 0xd6, 0xab, 0x4b, 0x9e
  1337. DEFINE_GUIDSTRUCT("A085651E-5F0D-4b36-A869-D195D6AB4B9E", KSNODETYPE_PEAKMETER);
  1338. #define KSNODETYPE_PEAKMETER DEFINE_GUIDNAMED(KSNODETYPE_PEAKMETER)
  1339.  
  1340. //===========================================================================
  1341. // Topology Node Name GUIDs for common audio nodes
  1342. #define STATIC_KSAUDFNAME_BASS\
  1343.     0x185FEDE0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1344. DEFINE_GUIDSTRUCT("185FEDE0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_BASS);
  1345. #define KSAUDFNAME_BASS DEFINE_GUIDNAMED(KSAUDFNAME_BASS)
  1346.  
  1347. #define STATIC_KSAUDFNAME_TREBLE\
  1348.     0x185FEDE1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1349. DEFINE_GUIDSTRUCT("185FEDE1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_TREBLE);
  1350. #define KSAUDFNAME_TREBLE DEFINE_GUIDNAMED(KSAUDFNAME_TREBLE)
  1351.  
  1352. #define STATIC_KSAUDFNAME_3D_STEREO\
  1353.     0x185FEDE2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1354. DEFINE_GUIDSTRUCT("185FEDE2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_3D_STEREO);
  1355. #define KSAUDFNAME_3D_STEREO DEFINE_GUIDNAMED(KSAUDFNAME_3D_STEREO)
  1356.  
  1357. #define STATIC_KSAUDFNAME_MASTER_VOLUME\
  1358.     0x185FEDE3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1359. DEFINE_GUIDSTRUCT("185FEDE3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_VOLUME);
  1360. #define KSAUDFNAME_MASTER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_VOLUME)
  1361.  
  1362. #define STATIC_KSAUDFNAME_MASTER_MUTE\
  1363.     0x185FEDE4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1364. DEFINE_GUIDSTRUCT("185FEDE4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_MUTE);
  1365. #define KSAUDFNAME_MASTER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_MUTE)
  1366.  
  1367. #define STATIC_KSAUDFNAME_WAVE_VOLUME\
  1368.     0x185FEDE5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1369. DEFINE_GUIDSTRUCT("185FEDE5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_VOLUME);
  1370. #define KSAUDFNAME_WAVE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_VOLUME)
  1371.  
  1372. #define STATIC_KSAUDFNAME_WAVE_MUTE\
  1373.     0x185FEDE6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1374. DEFINE_GUIDSTRUCT("185FEDE6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_MUTE);
  1375. #define KSAUDFNAME_WAVE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_MUTE)
  1376.  
  1377. #define STATIC_KSAUDFNAME_MIDI_VOLUME\
  1378.     0x185FEDE7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1379. DEFINE_GUIDSTRUCT("185FEDE7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_VOLUME);
  1380. #define KSAUDFNAME_MIDI_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_VOLUME)
  1381.  
  1382. #define STATIC_KSAUDFNAME_MIDI_MUTE\
  1383.     0x185FEDE8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1384. DEFINE_GUIDSTRUCT("185FEDE8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_MUTE);
  1385. #define KSAUDFNAME_MIDI_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_MUTE)
  1386.  
  1387. #define STATIC_KSAUDFNAME_CD_VOLUME\
  1388.     0x185FEDE9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1389. DEFINE_GUIDSTRUCT("185FEDE9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_VOLUME);
  1390. #define KSAUDFNAME_CD_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_VOLUME)
  1391.  
  1392. #define STATIC_KSAUDFNAME_CD_MUTE\
  1393.     0x185FEDEAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1394. DEFINE_GUIDSTRUCT("185FEDEA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_MUTE);
  1395. #define KSAUDFNAME_CD_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_CD_MUTE)
  1396.  
  1397. #define STATIC_KSAUDFNAME_LINE_VOLUME\
  1398.     0x185FEDEBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1399. DEFINE_GUIDSTRUCT("185FEDEB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_VOLUME);
  1400. #define KSAUDFNAME_LINE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_VOLUME)
  1401.  
  1402. #define STATIC_KSAUDFNAME_LINE_MUTE\
  1403.     0x185FEDECL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1404. DEFINE_GUIDSTRUCT("185FEDEC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_MUTE);
  1405. #define KSAUDFNAME_LINE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_LINE_MUTE)
  1406.  
  1407. #define STATIC_KSAUDFNAME_MIC_VOLUME\
  1408.     0x185FEDEDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1409. DEFINE_GUIDSTRUCT("185FEDED-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_VOLUME);
  1410. #define KSAUDFNAME_MIC_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_VOLUME)
  1411.  
  1412. #define STATIC_KSAUDFNAME_MIC_MUTE\
  1413.     0x185FEDEEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1414. DEFINE_GUIDSTRUCT("185FEDEE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_MUTE);
  1415. #define KSAUDFNAME_MIC_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIC_MUTE)
  1416.  
  1417. #define STATIC_KSAUDFNAME_RECORDING_SOURCE\
  1418.     0x185FEDEFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1419. DEFINE_GUIDSTRUCT("185FEDEF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_SOURCE);
  1420. #define KSAUDFNAME_RECORDING_SOURCE DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_SOURCE)
  1421.  
  1422. #define STATIC_KSAUDFNAME_PC_SPEAKER_VOLUME\
  1423.     0x185FEDF0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1424. DEFINE_GUIDSTRUCT("185FEDF0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_VOLUME);
  1425. #define KSAUDFNAME_PC_SPEAKER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_VOLUME)
  1426.  
  1427. #define STATIC_KSAUDFNAME_PC_SPEAKER_MUTE\
  1428.     0x185FEDF1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1429. DEFINE_GUIDSTRUCT("185FEDF1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_MUTE);
  1430. #define KSAUDFNAME_PC_SPEAKER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_MUTE)
  1431.  
  1432. #define STATIC_KSAUDFNAME_MIDI_IN_VOLUME\
  1433.     0x185FEDF2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1434. DEFINE_GUIDSTRUCT("185FEDF2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_IN_VOLUME);
  1435. #define KSAUDFNAME_MIDI_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_IN_VOLUME)
  1436.  
  1437. #define STATIC_KSAUDFNAME_CD_IN_VOLUME\
  1438.     0x185FEDF3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1439. DEFINE_GUIDSTRUCT("185FEDF3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_IN_VOLUME);
  1440. #define KSAUDFNAME_CD_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_IN_VOLUME)
  1441.  
  1442. #define STATIC_KSAUDFNAME_LINE_IN_VOLUME\
  1443.     0x185FEDF4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1444. DEFINE_GUIDSTRUCT("185FEDF4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN_VOLUME);
  1445. #define KSAUDFNAME_LINE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN_VOLUME)
  1446.  
  1447. #define STATIC_KSAUDFNAME_MIC_IN_VOLUME\
  1448.     0x185FEDF5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1449. DEFINE_GUIDSTRUCT("185FEDF5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_IN_VOLUME);
  1450. #define KSAUDFNAME_MIC_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_IN_VOLUME)
  1451.  
  1452. #define STATIC_KSAUDFNAME_WAVE_IN_VOLUME\
  1453.     0x185FEDF6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1454. DEFINE_GUIDSTRUCT("185FEDF6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_IN_VOLUME);
  1455. #define KSAUDFNAME_WAVE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_IN_VOLUME)
  1456.  
  1457. #define STATIC_KSAUDFNAME_VOLUME_CONTROL\
  1458.     0x185FEDF7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1459. DEFINE_GUIDSTRUCT("185FEDF7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_VOLUME_CONTROL);
  1460. #define KSAUDFNAME_VOLUME_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_VOLUME_CONTROL)
  1461.  
  1462. #define STATIC_KSAUDFNAME_MIDI\
  1463.     0x185FEDF8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1464. DEFINE_GUIDSTRUCT("185FEDF8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI);
  1465. #define KSAUDFNAME_MIDI DEFINE_GUIDNAMED(KSAUDFNAME_MIDI)
  1466.  
  1467. #define STATIC_KSAUDFNAME_LINE_IN\
  1468.     0x185FEDF9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1469. DEFINE_GUIDSTRUCT("185FEDF9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN);
  1470. #define KSAUDFNAME_LINE_IN DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN)
  1471.  
  1472. #define STATIC_KSAUDFNAME_RECORDING_CONTROL\
  1473.     0x185FEDFAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1474. DEFINE_GUIDSTRUCT("185FEDFA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_CONTROL);
  1475. #define KSAUDFNAME_RECORDING_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_CONTROL)
  1476.  
  1477. #define STATIC_KSAUDFNAME_CD_AUDIO\
  1478.     0x185FEDFBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1479. DEFINE_GUIDSTRUCT("185FEDFB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_AUDIO);
  1480. #define KSAUDFNAME_CD_AUDIO DEFINE_GUIDNAMED(KSAUDFNAME_CD_AUDIO)
  1481.  
  1482. #define STATIC_KSAUDFNAME_AUX_VOLUME\
  1483.     0x185FEDFCL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1484. DEFINE_GUIDSTRUCT("185FEDFC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_VOLUME);
  1485. #define KSAUDFNAME_AUX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_AUX_VOLUME)
  1486.  
  1487. #define STATIC_KSAUDFNAME_AUX_MUTE\
  1488.     0x185FEDFDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1489. DEFINE_GUIDSTRUCT("185FEDFD-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_MUTE);
  1490. #define KSAUDFNAME_AUX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_AUX_MUTE)
  1491.  
  1492. #define STATIC_KSAUDFNAME_AUX\
  1493.     0x185FEDFEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1494. DEFINE_GUIDSTRUCT("185FEDFE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX);
  1495. #define KSAUDFNAME_AUX DEFINE_GUIDNAMED(KSAUDFNAME_AUX)
  1496.  
  1497. #define STATIC_KSAUDFNAME_PC_SPEAKER\
  1498.     0x185FEDFFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1499. DEFINE_GUIDSTRUCT("185FEDFF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER);
  1500. #define KSAUDFNAME_PC_SPEAKER DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER)
  1501.  
  1502. #define STATIC_KSAUDFNAME_WAVE_OUT_MIX\
  1503.     0x185FEE00L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1504. DEFINE_GUIDSTRUCT("185FEE00-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_OUT_MIX);
  1505. #define KSAUDFNAME_WAVE_OUT_MIX DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_OUT_MIX)
  1506.  
  1507. #define STATIC_KSAUDFNAME_MONO_OUT\
  1508.     0xf9b41dc3L, 0x96e2, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1509. DEFINE_GUIDSTRUCT("F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT);
  1510. #define KSAUDFNAME_MONO_OUT DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT)
  1511.  
  1512. #define STATIC_KSAUDFNAME_STEREO_MIX\
  1513.     0xdff077L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1514. DEFINE_GUIDSTRUCT("00DFF077-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX);
  1515. #define KSAUDFNAME_STEREO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX)
  1516.  
  1517. #define STATIC_KSAUDFNAME_MONO_MIX\
  1518.     0xdff078L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1519. DEFINE_GUIDSTRUCT("00DFF078-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX);
  1520. #define KSAUDFNAME_MONO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX)
  1521.  
  1522. #define STATIC_KSAUDFNAME_MONO_OUT_VOLUME\
  1523.     0x1ad247ebL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1524. DEFINE_GUIDSTRUCT("1AD247EB-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_VOLUME);
  1525. #define KSAUDFNAME_MONO_OUT_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_VOLUME)
  1526.  
  1527. #define STATIC_KSAUDFNAME_MONO_OUT_MUTE\
  1528.     0x1ad247ecL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1529. DEFINE_GUIDSTRUCT("1AD247EC-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_MUTE);
  1530. #define KSAUDFNAME_MONO_OUT_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_MUTE)
  1531.  
  1532. #define STATIC_KSAUDFNAME_STEREO_MIX_VOLUME\
  1533.     0x1ad247edL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1534. DEFINE_GUIDSTRUCT("1AD247ED-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_VOLUME);
  1535. #define KSAUDFNAME_STEREO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_VOLUME)
  1536.  
  1537. #define STATIC_KSAUDFNAME_STEREO_MIX_MUTE\
  1538.     0x22b0eafdL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1539. DEFINE_GUIDSTRUCT("22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_MUTE);
  1540. #define KSAUDFNAME_STEREO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_MUTE)
  1541.  
  1542. #define STATIC_KSAUDFNAME_MONO_MIX_VOLUME\
  1543.     0x22b0eafeL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1544. DEFINE_GUIDSTRUCT("22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_VOLUME);
  1545. #define KSAUDFNAME_MONO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_VOLUME)
  1546.  
  1547. #define STATIC_KSAUDFNAME_MONO_MIX_MUTE\
  1548.     0x2bc31d69L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1549. DEFINE_GUIDSTRUCT("2BC31D69-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_MUTE);
  1550. #define KSAUDFNAME_MONO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_MUTE)
  1551.  
  1552. #define STATIC_KSAUDFNAME_MICROPHONE_BOOST\
  1553.     0x2bc31d6aL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1554. DEFINE_GUIDSTRUCT("2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MICROPHONE_BOOST);
  1555. #define KSAUDFNAME_MICROPHONE_BOOST DEFINE_GUIDNAMED(KSAUDFNAME_MICROPHONE_BOOST)
  1556.  
  1557. #define STATIC_KSAUDFNAME_ALTERNATE_MICROPHONE\
  1558.     0x2bc31d6bL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1559. DEFINE_GUIDSTRUCT("2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_ALTERNATE_MICROPHONE);
  1560. #define KSAUDFNAME_ALTERNATE_MICROPHONE DEFINE_GUIDNAMED(KSAUDFNAME_ALTERNATE_MICROPHONE)
  1561.  
  1562. #define STATIC_KSAUDFNAME_3D_DEPTH\
  1563.     0x63ff5747L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1564. DEFINE_GUIDSTRUCT("63FF5747-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_DEPTH);
  1565. #define KSAUDFNAME_3D_DEPTH DEFINE_GUIDNAMED(KSAUDFNAME_3D_DEPTH)
  1566.  
  1567. #define STATIC_KSAUDFNAME_3D_CENTER\
  1568.     0x9f0670b4L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1569. DEFINE_GUIDSTRUCT("9F0670B4-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_CENTER);
  1570. #define KSAUDFNAME_3D_CENTER DEFINE_GUIDNAMED(KSAUDFNAME_3D_CENTER)
  1571.  
  1572. #define STATIC_KSAUDFNAME_VIDEO_VOLUME\
  1573.     0x9b46e708L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1574. DEFINE_GUIDSTRUCT("9B46E708-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_VOLUME);
  1575. #define KSAUDFNAME_VIDEO_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_VOLUME)
  1576.  
  1577. #define STATIC_KSAUDFNAME_VIDEO_MUTE\
  1578.     0x9b46e709L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1579. DEFINE_GUIDSTRUCT("9B46E709-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_MUTE);
  1580. #define KSAUDFNAME_VIDEO_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_MUTE)
  1581.  
  1582. #define STATIC_KSAUDFNAME_VIDEO\
  1583.     0x915daec4L, 0xa434, 0x11d2, 0xac, 0x52, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1584. DEFINE_GUIDSTRUCT("915DAEC4-A434-11d2-AC52-00C04F8EFB68", KSAUDFNAME_VIDEO);
  1585. #define KSAUDFNAME_VIDEO DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO)
  1586.  
  1587. #define STATIC_KSAUDFNAME_PEAKMETER\
  1588.     0x57e24340L, 0xfc5b, 0x4612, 0xa5, 0x62, 0x72, 0xb1, 0x1a, 0x29, 0xdf, 0xae
  1589. DEFINE_GUIDSTRUCT("57E24340-FC5B-4612-A562-72B11A29DFAE", KSAUDFNAME_PEAKMETER);
  1590. #define KSAUDFNAME_PEAKMETER DEFINE_GUIDNAMED(KSAUDFNAME_PEAKMETER)
  1591.  
  1592. // Internal topology node pin definitions
  1593.  
  1594. #define KSNODEPIN_STANDARD_IN       1
  1595. #define KSNODEPIN_STANDARD_OUT      0
  1596.  
  1597. #define KSNODEPIN_SUM_MUX_IN        1   // can be >= 1
  1598. #define KSNODEPIN_SUM_MUX_OUT       0
  1599.  
  1600. #define KSNODEPIN_DEMUX_IN          0
  1601. #define KSNODEPIN_DEMUX_OUT         1   // can be >= 1
  1602.  
  1603. #define KSNODEPIN_AEC_RENDER_IN     1
  1604. #define KSNODEPIN_AEC_RENDER_OUT    0
  1605. #define KSNODEPIN_AEC_CAPTURE_IN    2
  1606. #define KSNODEPIN_AEC_CAPTURE_OUT   3
  1607.  
  1608. //===========================================================================
  1609. //===========================================================================
  1610.  
  1611. #define STATIC_KSMETHODSETID_Wavetable\
  1612.     0xDCEF31EBL, 0xD907, 0x11D0, 0x95, 0x83, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1613. DEFINE_GUIDSTRUCT("DCEF31EB-D907-11D0-9583-00C04FB925D3", KSMETHODSETID_Wavetable);
  1614. #define KSMETHODSETID_Wavetable DEFINE_GUIDNAMED(KSMETHODSETID_Wavetable)
  1615.  
  1616. typedef enum {
  1617.     KSMETHOD_WAVETABLE_WAVE_ALLOC,
  1618.     KSMETHOD_WAVETABLE_WAVE_FREE,
  1619.     KSMETHOD_WAVETABLE_WAVE_FIND,
  1620.     KSMETHOD_WAVETABLE_WAVE_WRITE
  1621. } KSMETHOD_WAVETABLE;
  1622.  
  1623. typedef struct {
  1624.     KSIDENTIFIER        Identifier;                     // wave identifier
  1625.     ULONG               Size;                           // wave size
  1626.     BOOL                Looped;                         // wave looped flag
  1627.     ULONG               LoopPoint;                      // wave loop point
  1628.     BOOL                InROM;                          // wave InROM flag
  1629.     KSDATAFORMAT        Format;                         // wave format
  1630. } KSWAVETABLE_WAVE_DESC, *PKSWAVETABLE_WAVE_DESC;
  1631.  
  1632.  
  1633. //===========================================================================
  1634. //===========================================================================
  1635.  
  1636. /*
  1637.     Property sets and items
  1638. */
  1639.  
  1640. //===========================================================================
  1641. //===========================================================================
  1642.  
  1643. #define STATIC_KSPROPSETID_Acoustic_Echo_Cancel\
  1644.     0xd7a4af8bL, 0x3dc1, 0x4902, 0x91, 0xea, 0x8a, 0x15, 0xc9, 0x0e, 0x05, 0xb2
  1645. DEFINE_GUIDSTRUCT("D7A4AF8B-3DC1-4902-91EA-8A15C90E05B2", KSPROPSETID_Acoustic_Echo_Cancel);
  1646. #define KSPROPSETID_Acoustic_Echo_Cancel DEFINE_GUIDNAMED(KSPROPSETID_Acoustic_Echo_Cancel)
  1647.  
  1648. typedef enum {
  1649.     KSPROPERTY_AEC_NOISE_FILL_ENABLE = 0,
  1650.     KSPROPERTY_AEC_STATUS,
  1651.     KSPROPERTY_AEC_MODE
  1652. } KSPROPERTY_AEC;
  1653.  
  1654. #define AEC_STATUS_FD_HISTORY_UNINITIALIZED             0x0
  1655. #define AEC_STATUS_FD_HISTORY_CONTINUOUSLY_CONVERGED    0x1
  1656. #define AEC_STATUS_FD_HISTORY_PREVIOUSLY_DIVERGED       0x2
  1657. #define AEC_STATUS_FD_CURRENTLY_CONVERGED               0x8
  1658.  
  1659. #define AEC_MODE_PASS_THROUGH           0x0
  1660. #define AEC_MODE_HALF_DUPLEX            0x1
  1661. #define AEC_MODE_FULL_DUPLEX            0x2
  1662.  
  1663. //===========================================================================
  1664. //===========================================================================
  1665.  
  1666. #define STATIC_KSPROPSETID_Wave_Queued\
  1667.     0x16a15b10L, 0x16f0, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  1668. DEFINE_GUIDSTRUCT("16a15b10-16f0-11d0-a195-0020afd156e4", KSPROPSETID_Wave_Queued);
  1669. #define KSPROPSETID_Wave_Queued DEFINE_GUIDNAMED(KSPROPSETID_Wave_Queued)
  1670.  
  1671. #define KSPROPERTY_WAVE_QUEUED_POSITION                 0x00000001
  1672.  
  1673. #define STATIC_KSMETHODSETID_Wave_Queued\
  1674.     0x7432c160L, 0x8827, 0x11cf, 0xa1, 0x02, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  1675. DEFINE_GUIDSTRUCT("7432c160-8827-11cf-a102-0020afd156e4", KSMETHODSETID_Wave_Queued);
  1676. #define KSMETHODSETID_Wave_Queued DEFINE_GUIDNAMED(KSMETHODSETID_Wave_Queued)
  1677.  
  1678. #define KSMETHOD_WAVE_QUEUED_BREAKLOOP                  0x00000001
  1679.  
  1680. #define STATIC_KSPROPSETID_Wave\
  1681.     0x924e54b0L, 0x630f, 0x11cf, 0xad, 0xa7, 0x08, 0x00, 0x3e, 0x30, 0x49, 0x4a
  1682. DEFINE_GUIDSTRUCT("924e54b0-630f-11cf-ada7-08003e30494a", KSPROPSETID_Wave);
  1683. #define KSPROPSETID_Wave DEFINE_GUIDNAMED(KSPROPSETID_Wave)
  1684.  
  1685. typedef enum {
  1686.     KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES,
  1687.     KSPROPERTY_WAVE_INPUT_CAPABILITIES,
  1688.     KSPROPERTY_WAVE_OUTPUT_CAPABILITIES,
  1689.     KSPROPERTY_WAVE_BUFFER,
  1690.     KSPROPERTY_WAVE_FREQUENCY,
  1691.     KSPROPERTY_WAVE_VOLUME,
  1692.     KSPROPERTY_WAVE_PAN
  1693. } KSPROPERTY_WAVE;
  1694.  
  1695. typedef struct {
  1696.     ULONG        ulDeviceType;
  1697. } KSWAVE_COMPATCAPS, *PKSWAVE_COMPATCAPS;
  1698.  
  1699. #define KSWAVE_COMPATCAPS_INPUT                 0x00000000
  1700. #define KSWAVE_COMPATCAPS_OUTPUT                0x00000001
  1701.  
  1702. typedef struct {
  1703.     ULONG  MaximumChannelsPerConnection;
  1704.     ULONG  MinimumBitsPerSample;
  1705.     ULONG  MaximumBitsPerSample;
  1706.     ULONG  MinimumSampleFrequency;
  1707.     ULONG  MaximumSampleFrequency;
  1708.     ULONG  TotalConnections;
  1709.     ULONG  ActiveConnections;
  1710. } KSWAVE_INPUT_CAPABILITIES, *PKSWAVE_INPUT_CAPABILITIES;
  1711.  
  1712. typedef struct {
  1713.     ULONG  MaximumChannelsPerConnection;
  1714.     ULONG  MinimumBitsPerSample;
  1715.     ULONG  MaximumBitsPerSample;
  1716.     ULONG  MinimumSampleFrequency;
  1717.     ULONG  MaximumSampleFrequency;
  1718.     ULONG  TotalConnections;
  1719.     ULONG  StaticConnections;
  1720.     ULONG  StreamingConnections;
  1721.     ULONG  ActiveConnections;
  1722.     ULONG  ActiveStaticConnections;
  1723.     ULONG  ActiveStreamingConnections;
  1724.     ULONG  Total3DConnections;
  1725.     ULONG  Static3DConnections;
  1726.     ULONG  Streaming3DConnections;
  1727.     ULONG  Active3DConnections;
  1728.     ULONG  ActiveStatic3DConnections;
  1729.     ULONG  ActiveStreaming3DConnections;
  1730.     ULONG  TotalSampleMemory;
  1731.     ULONG  FreeSampleMemory;
  1732.     ULONG  LargestFreeContiguousSampleMemory;
  1733. } KSWAVE_OUTPUT_CAPABILITIES, *PKSWAVE_OUTPUT_CAPABILITIES;
  1734.  
  1735. typedef struct {
  1736.     LONG  LeftAttenuation;
  1737.     LONG  RightAttenuation;
  1738. } KSWAVE_VOLUME, *PKSWAVE_VOLUME;
  1739.  
  1740. #define KSWAVE_BUFFER_ATTRIBUTEF_LOOPING   0x00000001
  1741. #define KSWAVE_BUFFER_ATTRIBUTEF_STATIC    0x00000002
  1742.  
  1743. typedef struct {
  1744.     ULONG   Attributes;
  1745.     ULONG   BufferSize;
  1746.     PVOID   BufferAddress;
  1747. } KSWAVE_BUFFER, *PKSWAVE_BUFFER;
  1748.  
  1749. //===========================================================================
  1750. //===========================================================================
  1751.  
  1752. #define STATIC_KSMUSIC_TECHNOLOGY_PORT\
  1753.     0x86C92E60L, 0x62E8, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1754. DEFINE_GUIDSTRUCT("86C92E60-62E8-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_PORT);
  1755. #define KSMUSIC_TECHNOLOGY_PORT DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_PORT)
  1756.  
  1757. #define STATIC_KSMUSIC_TECHNOLOGY_SQSYNTH\
  1758.     0x0ECF4380L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1759. DEFINE_GUIDSTRUCT("0ECF4380-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_SQSYNTH);
  1760. #define KSMUSIC_TECHNOLOGY_SQSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SQSYNTH)
  1761.  
  1762. #define STATIC_KSMUSIC_TECHNOLOGY_FMSYNTH\
  1763.     0x252C5C80L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1764. DEFINE_GUIDSTRUCT("252C5C80-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_FMSYNTH);
  1765. #define KSMUSIC_TECHNOLOGY_FMSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_FMSYNTH)
  1766.  
  1767. #define STATIC_KSMUSIC_TECHNOLOGY_WAVETABLE\
  1768.     0x394EC7C0L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1769. DEFINE_GUIDSTRUCT("394EC7C0-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_WAVETABLE);
  1770. #define KSMUSIC_TECHNOLOGY_WAVETABLE DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_WAVETABLE)
  1771.  
  1772. #define STATIC_KSMUSIC_TECHNOLOGY_SWSYNTH\
  1773.     0x37407736L, 0x3620, 0x11D1, 0x85, 0xD3, 0x00, 0x00, 0xF8, 0x75, 0x43, 0x80
  1774. DEFINE_GUIDSTRUCT("37407736-3620-11D1-85D3-0000F8754380", KSMUSIC_TECHNOLOGY_SWSYNTH);
  1775. #define KSMUSIC_TECHNOLOGY_SWSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SWSYNTH)
  1776.  
  1777. #define STATIC_KSPROPSETID_WaveTable\
  1778.     0x8539E660L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1779. DEFINE_GUIDSTRUCT("8539E660-62E9-11CF-A5D6-28DB04C10000", KSPROPSETID_WaveTable);
  1780. #define KSPROPSETID_WaveTable DEFINE_GUIDNAMED(KSPROPSETID_WaveTable)
  1781.  
  1782. typedef enum {
  1783.     KSPROPERTY_WAVETABLE_LOAD_SAMPLE,
  1784.     KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE,
  1785.     KSPROPERTY_WAVETABLE_MEMORY,
  1786.     KSPROPERTY_WAVETABLE_VERSION
  1787. } KSPROPERTY_WAVETABLE;
  1788.  
  1789. typedef struct {
  1790.    KSDATARANGE              DataRange;
  1791.    GUID                     Technology;
  1792.    ULONG                    Channels;
  1793.    ULONG                    Notes;
  1794.    ULONG                    ChannelMask;
  1795. } KSDATARANGE_MUSIC, *PKSDATARANGE_MUSIC;
  1796.  
  1797. //===========================================================================
  1798.  
  1799. #define STATIC_KSEVENTSETID_Cyclic\
  1800.     0x142C1AC0L, 0x072A, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1801. DEFINE_GUIDSTRUCT("142C1AC0-072A-11D0-A5D6-28DB04C10000", KSEVENTSETID_Cyclic);
  1802. #define KSEVENTSETID_Cyclic DEFINE_GUIDNAMED(KSEVENTSETID_Cyclic)
  1803.  
  1804. typedef enum {
  1805.     KSEVENT_CYCLIC_TIME_INTERVAL,
  1806. } KSEVENT_CYCLIC_TIME;
  1807.  
  1808. #define STATIC_KSPROPSETID_Cyclic\
  1809.     0x3FFEAEA0L, 0x2BEE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1810. DEFINE_GUIDSTRUCT("3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000", KSPROPSETID_Cyclic);
  1811. #define KSPROPSETID_Cyclic DEFINE_GUIDNAMED(KSPROPSETID_Cyclic)
  1812.  
  1813. typedef enum {
  1814.     KSPROPERTY_CYCLIC_POSITION,
  1815. } KSPROPERTY_CYCLIC;
  1816.  
  1817. //===========================================================================
  1818. #define STATIC_KSEVENTSETID_AudioControlChange\
  1819.     0xE85E9698L, 0xFA2F, 0x11D1, 0x95, 0xBD, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1820. DEFINE_GUIDSTRUCT("E85E9698-FA2F-11D1-95BD-00C04FB925D3", KSEVENTSETID_AudioControlChange);
  1821. #define KSEVENTSETID_AudioControlChange DEFINE_GUIDNAMED(KSEVENTSETID_AudioControlChange)
  1822.  
  1823. typedef enum {
  1824.     KSEVENT_CONTROL_CHANGE,
  1825. } KSEVENT_AUDIO_CONTROL_CHANGE;
  1826.  
  1827. //===========================================================================
  1828.  
  1829. #define STATIC_KSEVENTSETID_LoopedStreaming\
  1830.     0x4682B940L, 0xC6EF, 0x11D0, 0x96, 0xD8, 0x00, 0xAA, 0x00, 0x51, 0xE5, 0x1D
  1831. DEFINE_GUIDSTRUCT("4682B940-C6EF-11D0-96D8-00AA0051E51D", KSEVENTSETID_LoopedStreaming);
  1832. #define KSEVENTSETID_LoopedStreaming DEFINE_GUIDNAMED(KSEVENTSETID_LoopedStreaming)
  1833.  
  1834. typedef enum {
  1835.     KSEVENT_LOOPEDSTREAMING_POSITION,
  1836. } KSEVENT_LOOPEDSTREAMING;
  1837.  
  1838. typedef struct {
  1839.     KSEVENTDATA KsEventData;
  1840. #if defined(_NTDDK_)
  1841.     ULONGLONG   Position;
  1842. #else // !_NTDDK_
  1843.     DWORDLONG   Position;
  1844. #endif // !_NTDDK_
  1845. } LOOPEDSTREAMING_POSITION_EVENT_DATA, *PLOOPEDSTREAMING_POSITION_EVENT_DATA ;
  1846.  
  1847. //===========================================================================
  1848. #define STATIC_KSEVENTSETID_Sysaudio \
  1849.     0x04800320L, 0x4491, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
  1850. DEFINE_GUIDSTRUCT("04800320-4491-11D1-A050-405705C10000", KSEVENTSETID_Sysaudio);
  1851. #define KSEVENTSETID_Sysaudio DEFINE_GUIDNAMED(KSEVENTSETID_Sysaudio)
  1852.  
  1853. typedef enum {
  1854.     KSEVENT_SYSAUDIO_ADDREMOVE_DEVICE,
  1855.     KSEVENT_SYSAUDIO_CHANGE_DEVICE
  1856. } KSEVENT_SYSAUDIO;
  1857.  
  1858. //===========================================================================
  1859. // @@BEGIN_DDKSPLIT
  1860. #define STATIC_KSPROPSETID_Sysaudio\
  1861.     0xCBE3FAA0L, 0xCC75, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
  1862. DEFINE_GUIDSTRUCT("CBE3FAA0-CC75-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio);
  1863. #define KSPROPSETID_Sysaudio DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio)
  1864.  
  1865. typedef enum {
  1866.     KSPROPERTY_SYSAUDIO_DEVICE_COUNT = 1,
  1867.     KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME,
  1868.     KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE,
  1869.     KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME,
  1870.     KSPROPERTY_SYSAUDIO_SELECT_GRAPH,
  1871.     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE,
  1872.     KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT,
  1873.     KSPROPERTY_SYSAUDIO_ALWAYS_CREATE_VIRTUAL_SOURCE,
  1874.     KSPROPERTY_SYSAUDIO_ADDREMOVE_LOCK,
  1875.     KSPROPERTY_SYSAUDIO_ADDREMOVE_UNLOCK,
  1876.     KSPROPERTY_SYSAUDIO_RENDER_PIN_INSTANCES,
  1877.     KSPROPERTY_SYSAUDIO_RENDER_CONNECTION_INDEX,
  1878.     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE_ONLY,
  1879.     KSPROPERTY_SYSAUDIO_INSTANCE_INFO,
  1880.     KSPROPERTY_SYSAUDIO_PREFERRED_DEVICE,
  1881.     KSPROPERTY_SYSAUDIO_COMPONENT_ID,
  1882.     KSPROPERTY_SYSAUDIO_ADDREMOVE_GFX
  1883. } KSPROPERTY_SYSAUDIO;
  1884.  
  1885. typedef struct {
  1886.     KSPROPERTY Property;
  1887.     GUID PinCategory;
  1888.     GUID PinName;
  1889. } SYSAUDIO_CREATE_VIRTUAL_SOURCE, *PSYSAUDIO_CREATE_VIRTUAL_SOURCE;
  1890.  
  1891. typedef struct {
  1892.     BOOL        Enable;
  1893.     HANDLE      hGfx;
  1894.     ULONG       ulOrder;                    // Order of the GFX
  1895.     ULONG       ulType;                     // Type of the GFX
  1896.     ULONG       ulFlags;
  1897.     ULONG       ulDeviceNameOffset;         // DeviceInterface on which this GFX needs to be attached
  1898.     ULONG       ulFriendlyNameOffset;       // Friendly name of the GFX
  1899. } SYSAUDIO_GFX, *PSYSAUDIO_GFX;
  1900.  
  1901. #define GFX_DEVICETYPE_RENDER     1
  1902. #define GFX_DEVICETYPE_CAPTURE    2
  1903.  
  1904. typedef struct {
  1905.     KSPROPERTY Property;
  1906.     ULONG PinId;
  1907.     ULONG NodeId;
  1908.     ULONG Flags;
  1909.     ULONG Reserved;
  1910. } SYSAUDIO_SELECT_GRAPH, *PSYSAUDIO_SELECT_GRAPH;
  1911.  
  1912. typedef struct {
  1913.     KSPROPERTY Property;
  1914.     ULONG Flags;
  1915.     ULONG DeviceNumber;
  1916. } SYSAUDIO_INSTANCE_INFO, *PSYSAUDIO_INSTANCE_INFO;
  1917.  
  1918. #define SYSAUDIO_FLAGS_DONT_COMBINE_PINS        0x00000001
  1919.  
  1920.  
  1921. typedef struct {
  1922.     KSPROPERTY Property;
  1923.     ULONG Flags;
  1924.     ULONG Index;            // KSPROPERTY_SYSAUDIO_DEFAULT_TYPE
  1925. } SYSAUDIO_PREFERRED_DEVICE, *PSYSAUDIO_PREFERRED_DEVICE;
  1926.  
  1927. #define SYSAUDIO_FLAGS_CLEAR_PREFERRED          0x00000002
  1928.  
  1929. #define STATIC_KSPROPSETID_Sysaudio_Pin \
  1930.     0xA3A53220L, 0xC6E4, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
  1931. DEFINE_GUIDSTRUCT("A3A53220-C6E4-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio_Pin);
  1932. #define KSPROPSETID_Sysaudio_Pin DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio_Pin)
  1933.  
  1934. typedef enum {
  1935.     KSPROPERTY_SYSAUDIO_TOPOLOGY_CONNECTION_INDEX,
  1936.     KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE,
  1937.     KSPROPERTY_SYSAUDIO_PIN_VOLUME_NODE
  1938. } KSPROPERTY_SYSAUDIO_PIN;
  1939.  
  1940. typedef struct {
  1941.     KSPROPERTY  Property;
  1942.     ULONG       MixerPinId;
  1943.     ULONG       Reserved;
  1944. } SYSAUDIO_ATTACH_VIRTUAL_SOURCE, *PSYSAUDIO_ATTACH_VIRTUAL_SOURCE;
  1945. // @@END_DDKSPLIT
  1946.  
  1947. //===========================================================================
  1948. typedef struct {
  1949.     KSPROPERTY  Property;
  1950.     ULONG       NodeId;
  1951.     ULONG       Reserved;
  1952. } KSNODEPROPERTY, *PKSNODEPROPERTY;
  1953.  
  1954. typedef struct {
  1955.     KSNODEPROPERTY NodeProperty;
  1956.     LONG           Channel;                   // value to get or set
  1957.     ULONG          Reserved;
  1958. } KSNODEPROPERTY_AUDIO_CHANNEL, *PKSNODEPROPERTY_AUDIO_CHANNEL;
  1959.  
  1960. typedef struct {
  1961.     KSNODEPROPERTY NodeProperty;
  1962.     ULONG   DevSpecificId;
  1963.     ULONG   DeviceInfo;
  1964.     ULONG   Length;
  1965. } KSNODEPROPERTY_AUDIO_DEV_SPECIFIC, *PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC;
  1966.  
  1967. typedef struct {
  1968.     KSNODEPROPERTY   NodeProperty;
  1969.     PVOID            ListenerId;
  1970. #ifndef _WIN64
  1971.     ULONG            Reserved;
  1972. #endif // _WIN64
  1973. } KSNODEPROPERTY_AUDIO_3D_LISTENER, *PKSNODEPROPERTY_AUDIO_3D_LISTENER;
  1974.  
  1975. typedef struct {
  1976.     KSNODEPROPERTY   NodeProperty;
  1977.     PVOID            AppContext;
  1978.     ULONG            Length;
  1979. #ifndef _WIN64
  1980.     ULONG            Reserved;
  1981. #endif // _WIN64
  1982. } KSNODEPROPERTY_AUDIO_PROPERTY, *PKSNODEPROPERTY_AUDIO_PROPERTY;
  1983.  
  1984. //===========================================================================
  1985. // {79A9312E-59AE-43b0-A350-8B05284CAB24}
  1986. #define STATIC_KSPROPSETID_AudioGfx\
  1987.     0x79a9312eL, 0x59ae, 0x43b0, 0xa3, 0x50, 0x8b, 0x5, 0x28, 0x4c, 0xab, 0x24
  1988. DEFINE_GUIDSTRUCT("79A9312E-59AE-43b0-A350-8B05284CAB24", KSPROPSETID_AudioGfx);
  1989. #define KSPROPSETID_AudioGfx DEFINE_GUIDNAMED(KSPROPSETID_AudioGfx)
  1990.  
  1991. typedef enum {
  1992.     KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID,
  1993.     KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
  1994. } KSPROPERTY_AUDIOGFX;
  1995.  
  1996. //===========================================================================
  1997.  
  1998. #define STATIC_KSPROPSETID_Linear\
  1999.     0x5A2FFE80L, 0x16B9, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  2000. DEFINE_GUIDSTRUCT("5A2FFE80-16B9-11D0-A5D6-28DB04C10000", KSPROPSETID_Linear);
  2001. #define KSPROPSETID_Linear DEFINE_GUIDNAMED(KSPROPSETID_Linear)
  2002.  
  2003. typedef enum {
  2004.     KSPROPERTY_LINEAR_POSITION,
  2005. } KSPROPERTY_LINEAR;
  2006.  
  2007. //===========================================================================
  2008.  
  2009. //
  2010. // Midi definitions
  2011. //
  2012.  
  2013. /*
  2014.     Formats
  2015. */
  2016.  
  2017. #define STATIC_KSDATAFORMAT_TYPE_MUSIC\
  2018.     0xE725D360L, 0x62CC, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  2019. DEFINE_GUIDSTRUCT("E725D360-62CC-11CF-A5D6-28DB04C10000", KSDATAFORMAT_TYPE_MUSIC);
  2020. #define KSDATAFORMAT_TYPE_MUSIC DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MUSIC)
  2021.  
  2022. // 'mids' == MEDIATYPE_Midi
  2023. #define STATIC_KSDATAFORMAT_TYPE_MIDI\
  2024.     0x7364696DL, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  2025. DEFINE_GUIDSTRUCT("7364696D-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_MIDI);
  2026. #define KSDATAFORMAT_TYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MIDI)
  2027.  
  2028. #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI\
  2029.     0x1D262760L, 0xE957, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  2030. DEFINE_GUIDSTRUCT("1D262760-E957-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI);
  2031. #define KSDATAFORMAT_SUBTYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI)
  2032.  
  2033. #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI_BUS\
  2034.     0x2CA15FA0L, 0x6CFE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  2035. DEFINE_GUIDSTRUCT("2CA15FA0-6CFE-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI_BUS);
  2036. #define KSDATAFORMAT_SUBTYPE_MIDI_BUS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI_BUS)
  2037.  
  2038. #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFMIDI\
  2039.     0x4995DAF0L, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  2040. DEFINE_GUIDSTRUCT("4995DAF0-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFFMIDI);
  2041. #define KSDATAFORMAT_SUBTYPE_RIFFMIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFMIDI)
  2042.  
  2043. /*
  2044.     KSDATAFORMAT_SUBTYPE_DIRECTMUSIC
  2045.     see DMusicKS.h
  2046. */
  2047.  
  2048. // WARNING! This structure MUST be dword aligned
  2049. // regardless of the number of data bytes.
  2050.  
  2051. typedef struct {
  2052.     ULONG   TimeDeltaMs;        // Delta Milliseconds from the previous midiformat
  2053.                                 // in the packet. The first midiformat in the packet
  2054.                                 // is a delta from the PTS in the KSSTREAM_HEADER.
  2055.     ULONG   ByteCount;          // Number of bytes of data that follow this struct.
  2056. } KSMUSICFORMAT, *PKSMUSICFORMAT;
  2057.  
  2058. //
  2059. // This entire set of MPEG Standard/Dialect Guids are obsolete. Do not use them.
  2060. //
  2061. //====================================================================================================
  2062. //====================================================================================================
  2063. // The following official MPEG Formats, Subtypes and Specifiers are listed as required or optional
  2064. // These official MPEG GUIDs are the preferred method of supporting MPEG/AC-3 media types in new code.
  2065. // Older MPEG GUIDs should also be supported for compatibilty, but these new modes are still required.
  2066. //====================================================================================================
  2067. //====================================================================================================
  2068.  
  2069. /*
  2070. This is a summary of what media types/specifiers will be required for all DVD+DSS+DVB+DTV MPEG decoders.
  2071. These media types are what the decoder driver must accept, hardware support for all of these media types
  2072. may or may not actually be provided by the decoder natively.  These media types are intended to define
  2073. the "officially" supported MPEG/AC-3 media types that all WHQL certified decoders must implement.  This
  2074. specifically includes driver and/or hardware support for all the required standards and dialects.
  2075.  
  2076. All MPEG video decoders must support all of the MPEG video modes shown as [required] below.
  2077. All MPEG audio decoders must support all of the MPEG audio modes shown as [required] below.
  2078. All AC-3 audio decoders must support all of the AC-3 audio modes shown as [required] below.
  2079. The line items shown as [optional] need not be implemented, but are possible formats that might be implemented.
  2080.  
  2081. Note that the input/output pin formats are defined by 2 or 3 GUIDs: TYPE, SUBTYPE, and maybe SPECIFIER.
  2082. The specifiers are included if the data format is a "dialect" that needs to be differentiated during decoding.
  2083. The decoder MUST be prepared to deal with ALL requests for _required_ "Standard" formats OR _required_ "Dialects".
  2084.  
  2085. STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM         [required]
  2086.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [required]
  2087.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  2088.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [required]
  2089.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  2090.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  2091.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  2092.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  2093.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  2094.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  2095.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  2096. STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET                [required]
  2097.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [optional]
  2098.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  2099.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [optional]
  2100.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  2101.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  2102.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  2103.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  2104.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [required]
  2105.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  2106.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  2107. STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER               [required]
  2108.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  2109.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  2110.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  2111.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  2112.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  2113.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  2114.  
  2115. Note that the SPECIFIER GUIDs normally identify particular versions of MPEG such as DSS and DVD.
  2116. This approach was taken to minimize the number of DSS/DVB/DVD/DTV etc. media SUBTYPES.
  2117. These specifiers are currently required to disambiguate MPEG syntax _parsing_ by the decoder
  2118. using alternate parsing routines or downloadable firmware or hardware decode settings.
  2119.  
  2120. In the future these specifiers will be extended to cover new KS MPEG flavors such as DVB and DTV.
  2121. Thus, the optional specifiers will be subject to clarification and/or definition as they are needed.
  2122.  
  2123. Important note: Per the ITU MPEG specs, MPEG 2 media may contain pure MPEG 1 syntax and
  2124. any "MPEG 2" PES packets may actually contain MPEG 1 payloads and MPEG 1 syntax.  Some MPEG
  2125. broadcasts can revert from MPEG2 to MPEG1 format data at their discretion, without warning.
  2126.  
  2127. CAUTION: Decoders MUST attempt to process MPEG data AS SOON AS POSSIBLE after reception.
  2128. In particular, elementary MPEG or MPEG PES packet streams should not be aggregated into DVD
  2129. "pack headers" internally before submission to the codec hardware if AT ALL POSSIBLE.  The
  2130. reason is that mpeg data may need to be processed immediately but there may be no additional
  2131. MPEG data forthcoming to fill up the PES packet OR DVD "pack" in a timely fashion.  This is
  2132. particularly true of MPEG dialects that utilize "repeat field signally" to reuse the last
  2133. decoded MPEG video field.
  2134.  
  2135. */
  2136.  
  2137. /////////////////////////////////////////////////////////////////////////
  2138. // The major data type GUIDs that define the data packet encapsulation //
  2139. /////////////////////////////////////////////////////////////////////////
  2140.  
  2141. // STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM
  2142. #define STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM \
  2143.     0x36523b11L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2144. DEFINE_GUIDSTRUCT("36523B11-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM );
  2145. #define KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM)
  2146.  
  2147. // STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET
  2148. #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET \
  2149.     0x36523b12L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2150. DEFINE_GUIDSTRUCT("36523B12-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PES_PACKET );
  2151. #define KSDATAFORMAT_TYPE_STANDARD_PES_PACKET DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PES_PACKET)
  2152.  
  2153. // STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER
  2154. #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER \
  2155.     0x36523b13L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2156. DEFINE_GUIDSTRUCT("36523B13-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER );
  2157. #define KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER)
  2158.  
  2159. ///////////////////////////////////////////////////////////////////////////////
  2160. // The minor data subtype GUIDs that define the exact class of the data type.//
  2161. ///////////////////////////////////////////////////////////////////////////////
  2162.  
  2163. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO
  2164. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO \
  2165.     0x36523b21L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2166. DEFINE_GUIDSTRUCT("36523B21-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO );
  2167. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO)
  2168.  
  2169. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO
  2170. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO \
  2171.     0x36523b22L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2172. DEFINE_GUIDSTRUCT("36523B22-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO );
  2173. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO)
  2174.  
  2175. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO
  2176. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO \
  2177.     0x36523b23L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2178. DEFINE_GUIDSTRUCT("36523B23-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO );
  2179. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO)
  2180.  
  2181. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO
  2182. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO \
  2183.     0x36523b24L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2184. DEFINE_GUIDSTRUCT("36523B24-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO );
  2185. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO)
  2186.  
  2187. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO
  2188. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO \
  2189.     0x36523b25L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2190. DEFINE_GUIDSTRUCT("36523B25-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO );
  2191. #define KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO)
  2192.  
  2193. ///////////////////////////////////////////////////////////////////////////////
  2194. // The low-level specifier GUIDs that define the flavor of the data subtype. //
  2195. // Some SUBTYPES, notably MPEG2_VIDEO, MPEG2_AUDIO have different dialects.  //
  2196. // These specifiers are intended to be accompanied by a specifier structure. //
  2197. ///////////////////////////////////////////////////////////////////////////////
  2198.  
  2199. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO
  2200. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO \
  2201.     0x36523b31L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2202. DEFINE_GUIDSTRUCT("36523B31-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO );
  2203. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO)
  2204.  
  2205. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO
  2206. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO \
  2207.     0x36523b32L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2208. DEFINE_GUIDSTRUCT("36523B32-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO );
  2209. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO)
  2210.  
  2211. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO    Associated with KS_MPEGVIDEOINFO2 defined later
  2212. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO \
  2213.     0x36523b33L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2214. DEFINE_GUIDSTRUCT("36523B33-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO );
  2215. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO)
  2216.  
  2217. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO    Associated with KS_MPEGAUDIOINFO defined later
  2218. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO \
  2219.     0x36523b34L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2220. DEFINE_GUIDSTRUCT("36523B34-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO );
  2221. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO)
  2222.  
  2223. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO
  2224. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO \
  2225.     0x36523b35L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2226. DEFINE_GUIDSTRUCT("36523B35-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO );
  2227. #define KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO)
  2228.  
  2229. //====================================================================================================
  2230. //====================================================================================================
  2231. //                              *** COMPATIBILITY WARNING ***
  2232. // The *following* older DSS, MPEG, DVD & AC-3 GUID definitions are retained for backward compability.
  2233. // These MPEG GUIDs should also be supported for compatibilty, but the above newer modes are still required.
  2234. //====================================================================================================
  2235. //====================================================================================================
  2236.  
  2237. //
  2238. // DSS definitions
  2239. //
  2240.  
  2241. #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_VIDEO\
  2242.     0xa0af4f81L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
  2243. DEFINE_GUIDSTRUCT("a0af4f81-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_VIDEO);
  2244. #define KSDATAFORMAT_SUBTYPE_DSS_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_VIDEO)
  2245.  
  2246. #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_AUDIO\
  2247.     0xa0af4f82L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
  2248. DEFINE_GUIDSTRUCT("a0af4f82-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_AUDIO);
  2249. #define KSDATAFORMAT_SUBTYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_AUDIO)
  2250.  
  2251. //
  2252. // End of obsolete MPEG definitions.
  2253. //
  2254.  
  2255. //
  2256. // mpeg 1 definitions
  2257. //
  2258. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Packet\
  2259.     0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  2260. DEFINE_GUIDSTRUCT("e436eb80-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Packet);
  2261. #define KSDATAFORMAT_SUBTYPE_MPEG1Packet DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Packet)
  2262.  
  2263. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Payload\
  2264.     0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  2265. DEFINE_GUIDSTRUCT("e436eb81-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Payload);
  2266. #define KSDATAFORMAT_SUBTYPE_MPEG1Payload DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Payload)
  2267.  
  2268. // MEDIASUBTYPE_MPEG1Video
  2269. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Video\
  2270.     0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  2271. DEFINE_GUIDSTRUCT("e436eb86-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Video);
  2272. #define KSDATAFORMAT_SUBTYPE_MPEG1Video DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Video)
  2273.  
  2274. //FORMAT_MPEGVideo
  2275. #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO\
  2276.     0x05589f82L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  2277. DEFINE_GUIDSTRUCT("05589f82-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO);
  2278. #define KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO)
  2279.  
  2280. //
  2281. // mpeg 2 definitions
  2282. //
  2283. #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PES\
  2284.     0xe06d8020L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2285. DEFINE_GUIDSTRUCT("e06d8020-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PES);
  2286. #define KSDATAFORMAT_TYPE_MPEG2_PES DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PES)
  2287.  
  2288. #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PROGRAM\
  2289.     0xe06d8022L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2290. DEFINE_GUIDSTRUCT("e06d8022-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PROGRAM);
  2291. #define KSDATAFORMAT_TYPE_MPEG2_PROGRAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PROGRAM)
  2292.  
  2293. #define STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT\
  2294.     0xe06d8023L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2295. DEFINE_GUIDSTRUCT("e06d8023-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_TRANSPORT);
  2296. #define KSDATAFORMAT_TYPE_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_TRANSPORT)
  2297.  
  2298. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO\
  2299.     0xe06d8026L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2300. DEFINE_GUIDSTRUCT("e06d8026-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO);
  2301. #define KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO)
  2302.  
  2303. // use MPEGVIDEOINFO2 (defined below) with KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO
  2304. #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO\
  2305.     0xe06d80e3L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2306. DEFINE_GUIDSTRUCT("e06d80e3-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO);
  2307. #define KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO)
  2308.  
  2309.  
  2310. //
  2311. // Mpeg2 video properties
  2312. //
  2313.  
  2314.  
  2315. #define STATIC_KSPROPSETID_Mpeg2Vid\
  2316.     0xC8E11B60L, 0x0CC9, 0x11D0, 0xBD, 0x69, 0x00, 0x35, 0x05, 0xC1, 0x03, 0xA9
  2317. DEFINE_GUIDSTRUCT("C8E11B60-0CC9-11D0-BD69-003505C103A9", KSPROPSETID_Mpeg2Vid);
  2318. #define  KSPROPSETID_Mpeg2Vid DEFINE_GUIDNAMED( KSPROPSETID_Mpeg2Vid )
  2319.  
  2320.  
  2321. typedef enum {
  2322.     KSPROPERTY_MPEG2VID_MODES,          // available output modes of decoder
  2323.     KSPROPERTY_MPEG2VID_CUR_MODE,       // current mode of the decoder
  2324.     KSPROPERTY_MPEG2VID_4_3_RECT,       // output coordinates for 4:3 source
  2325.     KSPROPERTY_MPEG2VID_16_9_RECT,      // output coordinates for 16:9 source
  2326.     KSPROPERTY_MPEG2VID_16_9_PANSCAN,   // pan and scan vectors
  2327. } KSPROPERTY_MPEG2VID;
  2328.  
  2329. //
  2330. // bit field definitions for MPEG2 VIDEO mode
  2331. //
  2332.  
  2333. #define KSMPEGVIDMODE_PANSCAN   0x0001
  2334. #define KSMPEGVIDMODE_LTRBOX    0x0002
  2335. #define KSMPEGVIDMODE_SCALE     0x0004
  2336.  
  2337. //
  2338. // rectangle definitions for the 4/3 and 16/9 cropping properties of
  2339. // the MPEG2Video decoder
  2340. //
  2341.  
  2342. typedef struct _KSMPEGVID_RECT {
  2343.     ULONG StartX;
  2344.     ULONG StartY;
  2345.     ULONG EndX;
  2346.     ULONG EndY;
  2347. } KSMPEGVID_RECT, *PKSMPEGVID_RECT;
  2348.  
  2349. //
  2350. // Params for pan / scan
  2351. //
  2352.  
  2353.  
  2354. //
  2355. // MPEG2 Audio definition
  2356. //
  2357.  
  2358. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO\
  2359.     0xe06d802bL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2360. DEFINE_GUIDSTRUCT("e06d802b-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO);
  2361. #define KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO)
  2362.  
  2363. #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO\
  2364.     0xe06d80e5L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2365. DEFINE_GUIDSTRUCT("e06d80e5-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO);
  2366. #define KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO)
  2367.  
  2368. //
  2369. // DVD LPCM Audio definition
  2370. //
  2371.  
  2372. #define STATIC_KSDATAFORMAT_SUBTYPE_LPCM_AUDIO\
  2373.     0xe06d8032L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2374. DEFINE_GUIDSTRUCT("e06d8032-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_LPCM_AUDIO);
  2375. #define KSDATAFORMAT_SUBTYPE_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_LPCM_AUDIO)
  2376.  
  2377. #define STATIC_KSDATAFORMAT_SPECIFIER_LPCM_AUDIO\
  2378.     0xe06d80e6L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2379. DEFINE_GUIDSTRUCT("e06d80e6-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_LPCM_AUDIO);
  2380. #define KSDATAFORMAT_SPECIFIER_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_LPCM_AUDIO)
  2381.  
  2382. //
  2383. // AC-3 definition
  2384. //
  2385.  
  2386. #define STATIC_KSDATAFORMAT_SUBTYPE_AC3_AUDIO\
  2387.     0xe06d802cL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2388. DEFINE_GUIDSTRUCT("e06d802c-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_AC3_AUDIO);
  2389. #define KSDATAFORMAT_SUBTYPE_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_AC3_AUDIO)
  2390.  
  2391. #define STATIC_KSDATAFORMAT_SPECIFIER_AC3_AUDIO\
  2392.     0xe06d80e4L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2393. DEFINE_GUIDSTRUCT("e06d80e4-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_AC3_AUDIO);
  2394. #define KSDATAFORMAT_SPECIFIER_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_AC3_AUDIO)
  2395.  
  2396. #define STATIC_KSPROPSETID_AC3\
  2397.     0xBFABE720L, 0x6E1F, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  2398. DEFINE_GUIDSTRUCT("BFABE720-6E1F-11D0-BCF2-444553540000", KSPROPSETID_AC3);
  2399. #define KSPROPSETID_AC3 DEFINE_GUIDNAMED(KSPROPSETID_AC3)
  2400.  
  2401. typedef enum {
  2402.     KSPROPERTY_AC3_ERROR_CONCEALMENT = 1,
  2403.     KSPROPERTY_AC3_ALTERNATE_AUDIO,
  2404.     KSPROPERTY_AC3_DOWNMIX,
  2405.     KSPROPERTY_AC3_BIT_STREAM_MODE,
  2406.     KSPROPERTY_AC3_DIALOGUE_LEVEL,
  2407.     KSPROPERTY_AC3_LANGUAGE_CODE,
  2408.     KSPROPERTY_AC3_ROOM_TYPE
  2409. } KSPROPERTY_AC3;
  2410.  
  2411. typedef struct  {
  2412.     BOOL        fRepeatPreviousBlock;
  2413.     BOOL        fErrorInCurrentBlock;
  2414. } KSAC3_ERROR_CONCEALMENT, *PKSAC3_ERROR_CONCEALMENT;
  2415.  
  2416. typedef struct {
  2417.     BOOL    fStereo;
  2418.     ULONG   DualMode;
  2419. } KSAC3_ALTERNATE_AUDIO, *PKSAC3_ALTERNATE_AUDIO;
  2420.  
  2421. #define KSAC3_ALTERNATE_AUDIO_1     1
  2422. #define KSAC3_ALTERNATE_AUDIO_2     2
  2423. #define KSAC3_ALTERNATE_AUDIO_BOTH  3
  2424.  
  2425. typedef struct {
  2426.     BOOL        fDownMix;
  2427.     BOOL        fDolbySurround;
  2428. } KSAC3_DOWNMIX, *PKSAC3_DOWNMIX;
  2429.  
  2430. typedef struct {
  2431.     LONG        BitStreamMode;
  2432. } KSAC3_BIT_STREAM_MODE, *PKSAC3_BIT_STREAM_MODE;
  2433.  
  2434. #define KSAC3_SERVICE_MAIN_AUDIO            0
  2435. #define KSAC3_SERVICE_NO_DIALOG             1
  2436. #define KSAC3_SERVICE_VISUALLY_IMPAIRED     2
  2437. #define KSAC3_SERVICE_HEARING_IMPAIRED      3
  2438. #define KSAC3_SERVICE_DIALOG_ONLY           4
  2439. #define KSAC3_SERVICE_COMMENTARY            5
  2440. #define KSAC3_SERVICE_EMERGENCY_FLASH       6
  2441. #define KSAC3_SERVICE_VOICE_OVER            7
  2442.  
  2443. typedef struct {
  2444.     ULONG   DialogueLevel;
  2445. } KSAC3_DIALOGUE_LEVEL, *PKSAC3_DIALOGUE_LEVEL;
  2446.  
  2447. typedef struct {
  2448.     BOOL    fLargeRoom;
  2449. } KSAC3_ROOM_TYPE, *PKSAC3_ROOM_TYPE;
  2450.  
  2451.  
  2452. //
  2453. // DTS and SDDS definitions (media subtype GUIDs)
  2454. //
  2455. #define STATIC_KSDATAFORMAT_SUBTYPE_DTS_AUDIO\
  2456.     0xe06d8033L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2457. DEFINE_GUIDSTRUCT("e06d8033-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_DTS_AUDIO);
  2458. #define KSDATAFORMAT_SUBTYPE_DTS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DTS_AUDIO)
  2459.  
  2460. #define STATIC_KSDATAFORMAT_SUBTYPE_SDDS_AUDIO\
  2461.     0xe06d8034L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2462. DEFINE_GUIDSTRUCT("e06d8034-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_SDDS_AUDIO);
  2463. #define KSDATAFORMAT_SUBTYPE_SDDS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SDDS_AUDIO)
  2464.  
  2465.  
  2466. //
  2467. // audio decoder output properties
  2468. //
  2469.  
  2470. #define STATIC_KSPROPSETID_AudioDecoderOut\
  2471.     0x6ca6e020L, 0x43bd, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
  2472. DEFINE_GUIDSTRUCT("6ca6e020-43bd-11d0-bd6a-003505c103a9", KSPROPSETID_AudioDecoderOut);
  2473. #define KSPROPSETID_AudioDecoderOut DEFINE_GUIDNAMED(KSPROPSETID_AudioDecoderOut)
  2474.  
  2475. typedef enum {
  2476.     KSPROPERTY_AUDDECOUT_MODES,         // available output modes of decoder
  2477.     KSPROPERTY_AUDDECOUT_CUR_MODE,      // current mode of the decoder
  2478. } KSPROPERTY_AUDDECOUT;
  2479.  
  2480. #define KSAUDDECOUTMODE_STEREO_ANALOG   0x0001
  2481. #define KSAUDDECOUTMODE_PCM_51          0x0002
  2482. #define KSAUDDECOUTMODE_SPDIFF          0x0004
  2483.  
  2484.  
  2485.  
  2486. //
  2487. // subpicture definition
  2488. //
  2489.  
  2490. #define STATIC_KSDATAFORMAT_SUBTYPE_SUBPICTURE\
  2491.     0xe06d802dL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2492. DEFINE_GUIDSTRUCT("e06d802d-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_SUBPICTURE);
  2493. #define KSDATAFORMAT_SUBTYPE_SUBPICTURE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SUBPICTURE)
  2494.  
  2495.  
  2496. #define STATIC_KSPROPSETID_DvdSubPic\
  2497.     0xac390460L, 0x43af, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
  2498. DEFINE_GUIDSTRUCT("ac390460-43af-11d0-bd6a-003505c103a9", KSPROPSETID_DvdSubPic);
  2499. #define KSPROPSETID_DvdSubPic DEFINE_GUIDNAMED(KSPROPSETID_DvdSubPic)
  2500.  
  2501. typedef enum {
  2502.     KSPROPERTY_DVDSUBPIC_PALETTE,
  2503.     KSPROPERTY_DVDSUBPIC_HLI,
  2504.     KSPROPERTY_DVDSUBPIC_COMPOSIT_ON,  // TRUE for subpicture is displayed
  2505. } KSPROPERTY_DVDSUBPIC;
  2506.  
  2507. typedef struct _KS_DVD_YCrCb {
  2508.     UCHAR   Reserved;
  2509.     UCHAR   Y;
  2510.     UCHAR   Cr;
  2511.     UCHAR   Cb;
  2512. } KS_DVD_YCrCb, *PKS_DVD_YCrCb;
  2513.  
  2514. /* The KS_DVD_YUV structure is now superseded by KS_DVD_YCrCb above and is
  2515.    here for backward compatibility only */
  2516.  
  2517. typedef struct _KS_DVD_YUV {
  2518.     UCHAR   Reserved;
  2519.     UCHAR   Y;
  2520.     UCHAR   V;
  2521.     UCHAR   U;
  2522. } KS_DVD_YUV, *PKS_DVD_YUV;
  2523.  
  2524. typedef struct _KSPROPERTY_SPPAL {
  2525.     KS_DVD_YUV sppal[16];
  2526. } KSPROPERTY_SPPAL, *PKSPROPERTY_SPPAL;
  2527.  
  2528. typedef struct _KS_COLCON {
  2529.     UCHAR emph1col:4;
  2530.     UCHAR emph2col:4;
  2531.     UCHAR backcol:4;
  2532.     UCHAR patcol:4;
  2533.     UCHAR emph1con:4;
  2534.     UCHAR emph2con:4;
  2535.     UCHAR backcon:4;
  2536.     UCHAR patcon:4;
  2537.  
  2538. } KS_COLCON, *PKS_COLCON;
  2539.  
  2540. typedef struct _KSPROPERTY_SPHLI {
  2541.     USHORT      HLISS;
  2542.     USHORT      Reserved;
  2543.     ULONG       StartPTM;   // start presentation time in x/90000
  2544.     ULONG       EndPTM;     // end PTM in x/90000
  2545.     USHORT      StartX;
  2546.     USHORT      StartY;
  2547.     USHORT      StopX;
  2548.     USHORT      StopY;
  2549.     KS_COLCON   ColCon;     // color contrast description (4 bytes as given in HLI)
  2550. } KSPROPERTY_SPHLI, *PKSPROPERTY_SPHLI;
  2551.  
  2552. typedef BOOL KSPROPERTY_COMPOSIT_ON, *PKSPROPERTY_COMPOSIT_ON;
  2553.  
  2554. #define STATIC_KSPROPSETID_CopyProt \
  2555.     0x0E8A0A40L, 0x6AEF, 0x11D0, 0x9E, 0xD0, 0x00, 0xA0, 0x24, 0xCA, 0x19, 0xB3
  2556. DEFINE_GUIDSTRUCT("0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3", KSPROPSETID_CopyProt);
  2557. #define KSPROPSETID_CopyProt DEFINE_GUIDNAMED(KSPROPSETID_CopyProt)
  2558.  
  2559. typedef enum {
  2560.  
  2561.     KSPROPERTY_DVDCOPY_CHLG_KEY = 0x01,
  2562.     KSPROPERTY_DVDCOPY_DVD_KEY1,
  2563.     KSPROPERTY_DVDCOPY_DEC_KEY2,
  2564.     KSPROPERTY_DVDCOPY_TITLE_KEY,
  2565.     KSPROPERTY_COPY_MACROVISION,
  2566.     KSPROPERTY_DVDCOPY_REGION,
  2567.     KSPROPERTY_DVDCOPY_SET_COPY_STATE,
  2568.     KSPROPERTY_DVDCOPY_DISC_KEY = 0x80
  2569.  
  2570. } KSPROPERTY_COPYPROT;
  2571.  
  2572. typedef struct _KS_DVDCOPY_CHLGKEY {
  2573.     BYTE ChlgKey[10];
  2574.     BYTE Reserved[2];
  2575. } KS_DVDCOPY_CHLGKEY, *PKS_DVDCOPY_CHLGKEY;
  2576.  
  2577. typedef struct _KS_DVDCOPY_BUSKEY {
  2578.     BYTE BusKey[5];
  2579.     BYTE Reserved[1];
  2580. } KS_DVDCOPY_BUSKEY, *PKS_DVDCOPY_BUSKEY;
  2581.  
  2582.  
  2583. typedef struct _KS_DVDCOPY_DISCKEY {
  2584.     BYTE DiscKey[2048];
  2585. } KS_DVDCOPY_DISCKEY, *PKS_DVDCOPY_DISCKEY;
  2586.  
  2587. typedef struct _KS_DVDCOPY_REGION {
  2588.     UCHAR   Reserved;
  2589.     UCHAR   RegionData;
  2590.     UCHAR   Reserved2[2];
  2591. } KS_DVDCOPY_REGION, *PKS_DVDCOPY_REGION;
  2592.  
  2593. typedef struct _KS_DVDCOPY_TITLEKEY {
  2594.     ULONG KeyFlags;
  2595.     ULONG ReservedNT[2];
  2596.     UCHAR TitleKey[6];
  2597.     UCHAR Reserved[2];
  2598. } KS_DVDCOPY_TITLEKEY, *PKS_DVDCOPY_TITLEKEY;
  2599.  
  2600. typedef struct _KS_COPY_MACROVISION {
  2601.     ULONG MACROVISIONLevel;
  2602. } KS_COPY_MACROVISION, *PKS_COPY_MACROVISION;
  2603.  
  2604. typedef struct _KS_DVDCOPY_SET_COPY_STATE {
  2605.     ULONG DVDCopyState;
  2606. } KS_DVDCOPY_SET_COPY_STATE, *PKS_DVDCOPY_SET_COPY_STATE;
  2607.  
  2608. typedef enum {
  2609.     KS_DVDCOPYSTATE_INITIALIZE,         // indicates we are starting a full
  2610.                                         // copy protection sequence.
  2611.     KS_DVDCOPYSTATE_INITIALIZE_TITLE,   // indicates we are starting a title
  2612.                                         // key copy protection sequence
  2613.     KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
  2614.     KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
  2615.     KS_DVDCOPYSTATE_DONE,
  2616. } KS_DVDCOPYSTATE;
  2617.  
  2618. typedef enum {
  2619.     KS_MACROVISION_DISABLED,
  2620.     KS_MACROVISION_LEVEL1,
  2621.     KS_MACROVISION_LEVEL2,
  2622.     KS_MACROVISION_LEVEL3
  2623. } KS_COPY_MACROVISION_LEVEL, *PKS_COPY_MACROVISION_LEVEL;
  2624.  
  2625. //
  2626. // CGMS Copy Protection Flags
  2627. //
  2628.  
  2629. #define KS_DVD_CGMS_RESERVED_MASK      0x00000078
  2630.  
  2631. #define KS_DVD_CGMS_COPY_PROTECT_MASK  0x00000018
  2632. #define KS_DVD_CGMS_COPY_PERMITTED     0x00000000
  2633. #define KS_DVD_CGMS_COPY_ONCE          0x00000010
  2634. #define KS_DVD_CGMS_NO_COPY            0x00000018
  2635.  
  2636. #define KS_DVD_COPYRIGHT_MASK          0x00000040
  2637. #define KS_DVD_NOT_COPYRIGHTED         0x00000000
  2638. #define KS_DVD_COPYRIGHTED             0x00000040
  2639.  
  2640. #define KS_DVD_SECTOR_PROTECT_MASK     0x00000020
  2641. #define KS_DVD_SECTOR_NOT_PROTECTED    0x00000000
  2642. #define KS_DVD_SECTOR_PROTECTED        0x00000020
  2643.  
  2644.  
  2645. //===========================================================================
  2646. // The following MUST match the structures in WinGDI.h and AMVideo.h
  2647. //===========================================================================
  2648.  
  2649. #define STATIC_KSCATEGORY_TVTUNER \
  2650.     0xa799a800L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2651. DEFINE_GUIDSTRUCT("a799a800-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVTUNER);
  2652. #define KSCATEGORY_TVTUNER DEFINE_GUIDNAMED(KSCATEGORY_TVTUNER)
  2653.  
  2654. #define STATIC_KSCATEGORY_CROSSBAR \
  2655.     0xa799a801L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2656. DEFINE_GUIDSTRUCT("a799a801-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_CROSSBAR);
  2657. #define KSCATEGORY_CROSSBAR DEFINE_GUIDNAMED(KSCATEGORY_CROSSBAR)
  2658.  
  2659. #define STATIC_KSCATEGORY_TVAUDIO \
  2660.     0xa799a802L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2661. DEFINE_GUIDSTRUCT("a799a802-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVAUDIO);
  2662. #define KSCATEGORY_TVAUDIO DEFINE_GUIDNAMED(KSCATEGORY_TVAUDIO)
  2663.  
  2664. #define STATIC_KSCATEGORY_VPMUX \
  2665.     0xa799a803L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2666. DEFINE_GUIDSTRUCT("a799a803-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_VPMUX);
  2667. #define KSCATEGORY_VPMUX DEFINE_GUIDNAMED(KSCATEGORY_VPMUX)
  2668.  
  2669. #define STATIC_KSCATEGORY_VBICODEC \
  2670.     0x07dad660L, 0x22f1, 0x11d1, 0xa9, 0xf4, 0x00, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  2671. DEFINE_GUIDSTRUCT("07dad660-22f1-11d1-a9f4-00c04fbbde8f", KSCATEGORY_VBICODEC);
  2672. #define KSCATEGORY_VBICODEC DEFINE_GUIDNAMED(KSCATEGORY_VBICODEC)
  2673.  
  2674. // SUBTYPE_VPVideo
  2675. #define STATIC_KSDATAFORMAT_SUBTYPE_VPVideo\
  2676.     0x5a9b6a40L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  2677. DEFINE_GUIDSTRUCT("5a9b6a40-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVideo);
  2678. #define KSDATAFORMAT_SUBTYPE_VPVideo DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVideo)
  2679.  
  2680. // SUBTYPE_VPVBI
  2681. #define STATIC_KSDATAFORMAT_SUBTYPE_VPVBI\
  2682.     0x5a9b6a41L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  2683. DEFINE_GUIDSTRUCT("5a9b6a41-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVBI);
  2684. #define KSDATAFORMAT_SUBTYPE_VPVBI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVBI)
  2685.  
  2686.  
  2687. // FORMAT_VideoInfo
  2688. #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO\
  2689.     0x05589f80L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  2690. DEFINE_GUIDSTRUCT("05589f80-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_VIDEOINFO);
  2691. #define KSDATAFORMAT_SPECIFIER_VIDEOINFO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO)
  2692.  
  2693. // FORMAT_VideoInfo2
  2694. #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO2\
  2695.     0xf72a76A0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2696. DEFINE_GUIDSTRUCT("f72a76A0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VIDEOINFO2);
  2697. #define KSDATAFORMAT_SPECIFIER_VIDEOINFO2 DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO2)
  2698.  
  2699. // MEDIATYPE_AnalogVideo
  2700. #define STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO\
  2701.     0x0482dde1L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
  2702. DEFINE_GUIDSTRUCT("0482dde1-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_TYPE_ANALOGVIDEO);
  2703. #define KSDATAFORMAT_TYPE_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGVIDEO)
  2704.  
  2705. // FORMAT_AnalogVideo
  2706. #define STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO\
  2707.     0x0482dde0L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
  2708. DEFINE_GUIDSTRUCT("0482dde0-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_SPECIFIER_ANALOGVIDEO);
  2709. #define KSDATAFORMAT_SPECIFIER_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_ANALOGVIDEO)
  2710.  
  2711. // FORMAT_VBI
  2712. #define STATIC_KSDATAFORMAT_SPECIFIER_VBI\
  2713.     0xf72a76e0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2714. DEFINE_GUIDSTRUCT("f72a76e0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VBI);
  2715. #define KSDATAFORMAT_SPECIFIER_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VBI)
  2716.  
  2717. // MEDIATYPE_VBI
  2718. #define STATIC_KSDATAFORMAT_TYPE_VBI\
  2719.     0xf72a76e1L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2720. DEFINE_GUIDSTRUCT("f72a76e1-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_TYPE_VBI);
  2721. #define KSDATAFORMAT_TYPE_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VBI)
  2722.  
  2723. // SUBTYPE_RAW8
  2724. #define STATIC_KSDATAFORMAT_SUBTYPE_RAW8\
  2725.     0xca20d9a0, 0x3e3e, 0x11d1, 0x9b, 0xf9, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0xbf
  2726. DEFINE_GUIDSTRUCT("ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf", KSDATAFORMAT_SUBTYPE_RAW8);
  2727. #define KSDATAFORMAT_SUBTYPE_RAW8 DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RAW8)
  2728.  
  2729. // MEDIASUBTYPE_CC
  2730. #define STATIC_KSDATAFORMAT_SUBTYPE_CC\
  2731.     0x33214cc1, 0x11f, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
  2732. DEFINE_GUIDSTRUCT("33214CC1-011F-11D2-B4B1-00A0D102CFBE", KSDATAFORMAT_SUBTYPE_CC);
  2733. #define KSDATAFORMAT_SUBTYPE_CC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_CC)
  2734.  
  2735. // MEDIASUBTYPE_NABTS
  2736. #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS\
  2737.     0xf72a76e2L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2738. DEFINE_GUIDSTRUCT("f72a76e2-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_NABTS);
  2739. #define KSDATAFORMAT_SUBTYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS)
  2740.  
  2741. // MEDIASUBTYPE_TELETEXT
  2742. #define STATIC_KSDATAFORMAT_SUBTYPE_TELETEXT\
  2743.     0xf72a76e3L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2744. DEFINE_GUIDSTRUCT("f72a76e3-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_TELETEXT);
  2745. #define KSDATAFORMAT_SUBTYPE_TELETEXT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_TELETEXT)
  2746.  
  2747.  
  2748.  
  2749. /* constants for the biCompression field */
  2750. #define KS_BI_RGB        0L
  2751. #define KS_BI_RLE8       1L
  2752. #define KS_BI_RLE4       2L
  2753. #define KS_BI_BITFIELDS  3L
  2754.  
  2755. typedef struct tagKS_RGBQUAD { // rgbq
  2756.     BYTE    rgbBlue;
  2757.     BYTE    rgbGreen;
  2758.     BYTE    rgbRed;
  2759.     BYTE    rgbReserved;
  2760. } KS_RGBQUAD, *PKS_RGBQUAD;
  2761.  
  2762. /* constants for palettes */
  2763. #define KS_iPALETTE_COLORS 256     // Maximum colours in palette
  2764. #define KS_iEGA_COLORS 16          // Number colours in EGA palette
  2765. #define KS_iMASK_COLORS 3          // Maximum three components
  2766. #define KS_iTRUECOLOR 16           // Minimum true colour device
  2767. #define KS_iRED 0                  // Index position for RED mask
  2768. #define KS_iGREEN 1                // Index position for GREEN mask
  2769. #define KS_iBLUE 2                 // Index position for BLUE mask
  2770. #define KS_iPALETTE 8              // Maximum colour depth using a palette
  2771. #define KS_iMAXBITS 8              // Maximum bits per colour component
  2772. #define KS_SIZE_EGA_PALETTE (KS_iEGA_COLORS * sizeof(KS_RGBQUAD))
  2773. #define KS_SIZE_PALETTE (KS_iPALETTE_COLORS * sizeof(KS_RGBQUAD))
  2774.  
  2775. typedef struct tagKS_BITMAPINFOHEADER{
  2776.         DWORD      biSize;
  2777.         LONG       biWidth;
  2778.         LONG       biHeight;
  2779.         WORD       biPlanes;
  2780.         WORD       biBitCount;
  2781.         DWORD      biCompression;
  2782.         DWORD      biSizeImage;
  2783.         LONG       biXPelsPerMeter;
  2784.         LONG       biYPelsPerMeter;
  2785.         DWORD      biClrUsed;
  2786.         DWORD      biClrImportant;
  2787. } KS_BITMAPINFOHEADER, *PKS_BITMAPINFOHEADER;
  2788.  
  2789. // Used for true colour images that also have a palette
  2790.  
  2791. typedef struct tag_KS_TRUECOLORINFO {
  2792.     DWORD   dwBitMasks[KS_iMASK_COLORS];
  2793.     KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];
  2794. } KS_TRUECOLORINFO, *PKS_TRUECOLORINFO;
  2795.  
  2796.  
  2797. #define KS_WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
  2798. #define KS_DIBWIDTHBYTES(bi) (DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
  2799. #define KS__DIBSIZE(bi) (KS_DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
  2800. #define KS_DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi))
  2801.  
  2802. typedef LONGLONG REFERENCE_TIME;
  2803.  
  2804. // The BITMAPINFOHEADER contains all the details about the video stream such
  2805. // as the actual image dimensions and their pixel depth. A source filter may
  2806. // also request that the sink take only a section of the video by providing a
  2807. // clipping rectangle in rcSource. In the worst case where the sink filter
  2808. // forgets to check this on connection it will simply render the whole thing
  2809. // which isn't a disaster. Ideally a sink filter will check the rcSource and
  2810. // if it doesn't support image extraction and the rectangle is not empty then
  2811. // it will reject the connection. A filter should use SetRectEmpty to reset a
  2812. // rectangle to all zeroes (and IsRectEmpty to later check the rectangle).
  2813. // The rcTarget specifies the destination rectangle for the video, for most
  2814. // source filters they will set this to all zeroes, a downstream filter may
  2815. // request that the video be placed in a particular area of the buffers it
  2816. // supplies in which case it will call QueryAccept with a non empty target
  2817.  
  2818. typedef struct tagKS_VIDEOINFOHEADER {
  2819.  
  2820.     RECT                rcSource;          // The bit we really want to use
  2821.     RECT                rcTarget;          // Where the video should go
  2822.     DWORD               dwBitRate;         // Approximate bit data rate
  2823.     DWORD               dwBitErrorRate;    // Bit error rate for this stream
  2824.     REFERENCE_TIME      AvgTimePerFrame;   // Average time per frame (100ns units)
  2825.  
  2826.     KS_BITMAPINFOHEADER bmiHeader;
  2827.  
  2828. } KS_VIDEOINFOHEADER, *PKS_VIDEOINFOHEADER;
  2829.  
  2830. // !!! WARNING !!!
  2831. // DO NOT use the following structure unless you are sure that the BITMAPINFOHEADER
  2832. // has a normal biSize == sizeof(BITMAPINFOHEADER) !
  2833. // !!! WARNING !!!
  2834.  
  2835. typedef struct tagKS_VIDEOINFO {
  2836.  
  2837.     RECT            rcSource;          // The bit we really want to use
  2838.     RECT            rcTarget;          // Where the video should go
  2839.     DWORD           dwBitRate;         // Approximate bit data rate
  2840.     DWORD           dwBitErrorRate;    // Bit error rate for this stream
  2841.     REFERENCE_TIME  AvgTimePerFrame;   // Average time per frame (100ns units)
  2842.  
  2843.     KS_BITMAPINFOHEADER bmiHeader;
  2844.  
  2845.     union {
  2846.         KS_RGBQUAD          bmiColors[KS_iPALETTE_COLORS];     // Colour palette
  2847.         DWORD               dwBitMasks[KS_iMASK_COLORS];       // True colour masks
  2848.         KS_TRUECOLORINFO    TrueColorInfo;                     // Both of the above
  2849.     };
  2850.  
  2851. } KS_VIDEOINFO, *PKS_VIDEOINFO;
  2852.  
  2853.  
  2854. #define KS_SIZE_MASKS (KS_iMASK_COLORS * sizeof(DWORD))
  2855. #define KS_SIZE_PREHEADER (FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader))
  2856.  
  2857. // For normal size
  2858. // #define KS_SIZE_VIDEOHEADER (sizeof(KS_BITMAPINFOHEADER) + KS_SIZE_PREHEADER)
  2859. // !!! for abnormal biSizes
  2860. #define KS_SIZE_VIDEOHEADER(pbmi) ((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER)
  2861.  
  2862. // VBI
  2863. // Used for NABTS, CC, Intercast, WST
  2864. typedef struct tagKS_VBIINFOHEADER {
  2865.     ULONG       StartLine;              // inclusive
  2866.     ULONG       EndLine;                // inclusive
  2867.     ULONG       SamplingFrequency;      // Hz.
  2868.     ULONG       MinLineStartTime;       // microSec * 100 from HSync LE
  2869.     ULONG       MaxLineStartTime;       // microSec * 100 from HSync LE
  2870.     ULONG       ActualLineStartTime;    // microSec * 100 from HSync LE
  2871.     ULONG       ActualLineEndTime;      // microSec * 100 from HSync LE
  2872.     ULONG       VideoStandard;          // KS_AnalogVideoStandard*
  2873.     ULONG       SamplesPerLine;
  2874.     ULONG       StrideInBytes;          // May be > SamplesPerLine
  2875.     ULONG       BufferSize;             // Bytes
  2876. } KS_VBIINFOHEADER, *PKS_VBIINFOHEADER;
  2877.  
  2878. // VBI Sampling Rates
  2879. #define KS_VBIDATARATE_NABTS            (5727272L)
  2880. #define KS_VBIDATARATE_CC               ( 503493L)    // ~= 1/1.986125e-6
  2881. #define KS_VBISAMPLINGRATE_4X_NABTS     ((long)(4*KS_VBIDATARATE_NABTS))
  2882. #define KS_VBISAMPLINGRATE_47X_NABTS    ((long)(27000000))
  2883. #define KS_VBISAMPLINGRATE_5X_NABTS     ((long)(5*KS_VBIDATARATE_NABTS))
  2884.  
  2885. #define KS_47NABTS_SCALER (KS_VBISAMPLINGRATE_47X_NABTS/(double)KS_VBIDATARATE_NABTS)
  2886.  
  2887. // Analog video variant - Use this when the format is FORMAT_AnalogVideo
  2888. //
  2889. // rcSource defines the portion of the active video signal to use
  2890. // rcTarget defines the destination rectangle
  2891. //    both of the above are relative to the dwActiveWidth and dwActiveHeight fields
  2892. // dwActiveWidth is currently set to 720 for all formats (but could change for HDTV)
  2893. // dwActiveHeight is 483 for NTSC and 575 for PAL/SECAM  (but could change for HDTV)
  2894.  
  2895. typedef struct tagKS_AnalogVideoInfo {
  2896.     RECT            rcSource;           // Width max is 720, height varies w/ TransmissionStd
  2897.     RECT            rcTarget;           // Where the video should go
  2898.     DWORD           dwActiveWidth;      // Always 720 (CCIR-601 active samples per line)
  2899.     DWORD           dwActiveHeight;     // 483 for NTSC, 575 for PAL/SECAM
  2900.     REFERENCE_TIME  AvgTimePerFrame;    // Normal ActiveMovie units (100 nS)
  2901. } KS_ANALOGVIDEOINFO, *PKS_ANALOGVIDEOINFO;
  2902.  
  2903. //===========================================================================
  2904. // Data packet passed on Analog video stream channel change
  2905. //===========================================================================
  2906.  
  2907. #define KS_TVTUNER_CHANGE_BEGIN_TUNE    0x0001L  // Starting a tuning operation
  2908. #define KS_TVTUNER_CHANGE_END_TUNE      0x0002L  // Ending a tuning operation
  2909.  
  2910. typedef struct tagKS_TVTUNER_CHANGE_INFO {
  2911.    DWORD                    dwFlags;                // KS_TVTUNER_CHANGE_*
  2912.    DWORD                    dwCountryCode;
  2913.    DWORD                    dwAnalogVideoStandard;  // KS_AnalogVideoStandard
  2914.    DWORD                    dwChannel;
  2915. } KS_TVTUNER_CHANGE_INFO, *PKS_TVTUNER_CHANGE_INFO;
  2916.  
  2917. //===========================================================================
  2918. // Video format blocks
  2919. //===========================================================================
  2920.  
  2921. typedef enum {
  2922.     KS_MPEG2Level_Low,
  2923.     KS_MPEG2Level_Main,
  2924.     KS_MPEG2Level_High1440,
  2925.     KS_MPEG2Level_High
  2926. } KS_MPEG2Level;
  2927.  
  2928. typedef enum {
  2929.     KS_MPEG2Profile_Simple,
  2930.     KS_MPEG2Profile_Main,
  2931.     KS_MPEG2Profile_SNRScalable,
  2932.     KS_MPEG2Profile_SpatiallyScalable,
  2933.     KS_MPEG2Profile_High
  2934. } KS_MPEG2Profile;
  2935.  
  2936. #define KS_INTERLACE_IsInterlaced            0x00000001  // if 0, other interlace bits are irrelevent
  2937. #define KS_INTERLACE_1FieldPerSample         0x00000002  // else 2 fields per media sample
  2938. #define KS_INTERLACE_Field1First             0x00000004  // else Field 2 is first;  top field in PAL is field 1, top field in NTSC is field 2?
  2939. #define KS_INTERLACE_UNUSED                  0x00000008  //
  2940. #define KS_INTERLACE_FieldPatternMask        0x00000030  // use this mask with AMINTERLACE_FieldPat*
  2941. #define KS_INTERLACE_FieldPatField1Only      0x00000000  // Data never contains a Field2
  2942. #define KS_INTERLACE_FieldPatField2Only      0x00000010  // Data never contains a Field1
  2943. #define KS_INTERLACE_FieldPatBothRegular     0x00000020  // There will be a Field2 for every Field1 (required for Weave?)
  2944. #define KS_INTERLACE_FieldPatBothIrregular   0x00000030  // Random pattern of Field1s and Field2s
  2945. #define KS_INTERLACE_DisplayModeMask         0x000000c0
  2946. #define KS_INTERLACE_DisplayModeBobOnly      0x00000000
  2947. #define KS_INTERLACE_DisplayModeWeaveOnly    0x00000040
  2948. #define KS_INTERLACE_DisplayModeBobOrWeave   0x00000080
  2949.  
  2950.  
  2951.  
  2952. #define KS_MPEG2_DoPanScan           0x00000001  //if set, the MPEG-2 video decoder should crop output image
  2953.                                                 //  based on pan-scan vectors in picture_display_extension
  2954.                                                 //  and change the picture aspect ratio accordingly.
  2955. #define KS_MPEG2_DVDLine21Field1     0x00000002  //if set, the MPEG-2 decoder must be able to produce an output
  2956.                                                 //  pin for DVD style closed caption data found in GOP layer of field 1
  2957. #define KS_MPEG2_DVDLine21Field2     0x00000004  //if set, the MPEG-2 decoder must be able to produce an output
  2958.                                                 //  pin for DVD style closed caption data found in GOP layer of field 2
  2959. #define KS_MPEG2_SourceIsLetterboxed 0x00000008  //if set, indicates that black bars have been encoded in the top
  2960.                                                 //  and bottom of the video.
  2961. #define KS_MPEG2_FilmCameraMode      0x00000010  //if set, indicates "film mode" used for 625/50 content.  If cleared,
  2962.                                                 //  indicates that "camera mode" was used.
  2963. #define KS_MPEG2_LetterboxAnalogOut  0x00000020  //if set and this stream is sent to an analog output, it should
  2964.                         //  be letterboxed.  Streams sent to VGA should be letterboxed only by renderers.
  2965. #define KS_MPEG2_DSS_UserData        0x00000040  //if set, the MPEG-2 decoder must process DSS style user data
  2966. #define KS_MPEG2_DVB_UserData        0x00000080  //if set, the MPEG-2 decoder must process DVB style user data
  2967. #define KS_MPEG2_27MhzTimebase       0x00000100  //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  2968.  
  2969. typedef struct tagKS_VIDEOINFOHEADER2 {
  2970.     RECT                rcSource;
  2971.     RECT                rcTarget;
  2972.     DWORD               dwBitRate;
  2973.     DWORD               dwBitErrorRate;
  2974.     REFERENCE_TIME      AvgTimePerFrame;
  2975.     DWORD               dwInterlaceFlags;   // use AMINTERLACE_* defines. Reject connection if undefined bits are not 0
  2976.     DWORD               dwCopyProtectFlags; // use AMCOPYPROTECT_* defines. Reject connection if undefined bits are not 0
  2977.     DWORD               dwPictAspectRatioX; // X dimension of picture aspect ratio, e.g. 16 for 16x9 display
  2978.     DWORD               dwPictAspectRatioY; // Y dimension of picture aspect ratio, e.g.  9 for 16x9 display
  2979.     DWORD               dwReserved1;        // must be 0; reject connection otherwise
  2980.     DWORD               dwReserved2;        // must be 0; reject connection otherwise
  2981.     KS_BITMAPINFOHEADER bmiHeader;
  2982. } KS_VIDEOINFOHEADER2, *PKS_VIDEOINFOHEADER2;
  2983.  
  2984. typedef struct tagKS_MPEG1VIDEOINFO {
  2985.     KS_VIDEOINFOHEADER hdr; // Compatible with VIDEOINFO
  2986.     DWORD dwStartTimeCode; // 25-bit Group of pictures time code at start of data
  2987.     DWORD cbSequenceHeader; // Length in bytes of bSequenceHeader
  2988.     BYTE bSequenceHeader[1]; // Sequence header including quantization matrices if any
  2989. } KS_MPEG1VIDEOINFO, *PKS_MPEG1VIDEOINFO;
  2990.  
  2991. #define KS_MAX_SIZE_MPEG1_SEQUENCE_INFO 140
  2992. #define KS_SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(KS_MPEG1VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  2993. #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  2994.  
  2995. typedef struct tagKS_MPEGVIDEOINFO2 {
  2996.     KS_VIDEOINFOHEADER2 hdr;
  2997.     DWORD               dwStartTimeCode;        //  ?? not used for DVD ??
  2998.     DWORD               cbSequenceHeader;       // is 0 for DVD (no sequence header)
  2999.     DWORD               dwProfile;              // use enum MPEG2Profile
  3000.     DWORD               dwLevel;                // use enum MPEG2Level
  3001.     DWORD               dwFlags;                // use AMMPEG2_* defines.  Reject connection if undefined bits are not 0
  3002.     DWORD               bSequenceHeader[1];     // DWORD instead of Byte for alignment purposes
  3003.                                                 //   For MPEG-2, if a sequence_header is included, the sequence_extension
  3004.                                                 //   should also be included
  3005. } KS_MPEGVIDEOINFO2, *PKS_MPEGVIDEOINFO2;
  3006.  
  3007.  
  3008. #define KS_SIZE_MPEGVIDEOINFO2(pv) (FIELD_OFFSET(KS_MPEGVIDEOINFO2, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  3009. #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  3010.  
  3011. //===========================================================================
  3012. // Audio format blocks
  3013. //===========================================================================
  3014.  
  3015. //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  3016. #define KS_MPEGAUDIOINFO_27MhzTimebase      0x00000001
  3017.  
  3018. typedef struct tagKS_MPEAUDIOINFO {
  3019.     DWORD               dwFlags;            // use KS_MPEGAUDIOINFO_* defines.  Reject connection if undefined bits are not 0
  3020.     DWORD               dwReserved1;        // must be 0; reject connection otherwise
  3021.     DWORD               dwReserved2;        // must be 0; reject connection otherwise
  3022.     DWORD               dwReserved3;        // must be 0; reject connection otherwise
  3023. } KS_MPEGAUDIOINFO, *PKS_MPEGAUDIOINFO;
  3024.  
  3025. //===========================================================================
  3026. // Video DATAFORMATs
  3027. //===========================================================================
  3028.  
  3029. typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER {
  3030.     KSDATAFORMAT            DataFormat;
  3031.     KS_VIDEOINFOHEADER      VideoInfoHeader;
  3032. } KS_DATAFORMAT_VIDEOINFOHEADER, *PKS_DATAFORMAT_VIDEOINFOHEADER;
  3033.  
  3034. typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER2 {
  3035.     KSDATAFORMAT            DataFormat;
  3036.     KS_VIDEOINFOHEADER2     VideoInfoHeader2;
  3037. } KS_DATAFORMAT_VIDEOINFOHEADER2, *PKS_DATAFORMAT_VIDEOINFOHEADER2;
  3038.  
  3039. typedef struct tagKS_DATAFORMAT_VIDEOINFO_PALETTE {
  3040.     KSDATAFORMAT            DataFormat;
  3041.     KS_VIDEOINFO            VideoInfo;
  3042. } KS_DATAFORMAT_VIDEOINFO_PALETTE, *PKS_DATAFORMAT_VIDEOINFO_PALETTE;
  3043.  
  3044. typedef struct tagKS_DATAFORMAT_VBIINFOHEADER {
  3045.     KSDATAFORMAT            DataFormat;
  3046.     KS_VBIINFOHEADER        VBIInfoHeader;
  3047. } KS_DATAFORMAT_VBIINFOHEADER, *PKS_DATAFORMAT_VBIINFOHEADER;
  3048.  
  3049. typedef struct  _KS_VIDEO_STREAM_CONFIG_CAPS  {
  3050.     GUID guid;                  // will be MEDIATYPE_Video
  3051.     ULONG VideoStandard;        // logical OR of all AnalogVideoStandards
  3052.                                 // supported
  3053.     SIZE InputSize;             // the inherent size of the incoming signal
  3054.                                 // (every pixel unique)
  3055.     SIZE MinCroppingSize;       // smallest rcSrc cropping rect allowed
  3056.     SIZE MaxCroppingSize;       // largest rcSrc cropping rect allowed
  3057.     int CropGranularityX;       // granularity of cropping size
  3058.     int CropGranularityY;
  3059.     int CropAlignX;             // alignment of cropping rect
  3060.     int CropAlignY;
  3061.     SIZE MinOutputSize;         // smallest bitmap stream can produce
  3062.     SIZE MaxOutputSize;         // largest  bitmap stream can produce
  3063.     int OutputGranularityX;     // granularity of output bitmap size
  3064.     int OutputGranularityY;
  3065.     int StretchTapsX;           // 0, no stretch, 1 pix dup, 2 interp, ...
  3066.     int StretchTapsY;           //    Describes quality of hardware scaler
  3067.     int ShrinkTapsX;            //
  3068.     int ShrinkTapsY;            //
  3069.     LONGLONG MinFrameInterval;  // 100 nS units
  3070.     LONGLONG MaxFrameInterval;
  3071.     LONG MinBitsPerSecond;
  3072.     LONG MaxBitsPerSecond;
  3073. } KS_VIDEO_STREAM_CONFIG_CAPS, *PKS_VIDEO_STREAM_CONFIG_CAPS;
  3074.  
  3075. //===========================================================================
  3076. // Video DATARANGEs
  3077. //===========================================================================
  3078.  
  3079. typedef struct tagKS_DATARANGE_VIDEO {
  3080.    KSDATARANGE                  DataRange;
  3081.    BOOL                         bFixedSizeSamples;      // all samples same size?
  3082.    BOOL                         bTemporalCompression;   // all I frames?
  3083.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  3084.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  3085.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  3086.    KS_VIDEOINFOHEADER           VideoInfoHeader;        // default format
  3087. } KS_DATARANGE_VIDEO, *PKS_DATARANGE_VIDEO;
  3088.  
  3089. typedef struct tagKS_DATARANGE_VIDEO2 {
  3090.    KSDATARANGE                  DataRange;
  3091.    BOOL                         bFixedSizeSamples;      // all samples same size?
  3092.    BOOL                         bTemporalCompression;   // all I frames?
  3093.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  3094.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  3095.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  3096.    KS_VIDEOINFOHEADER2          VideoInfoHeader;        // default format
  3097. } KS_DATARANGE_VIDEO2, *PKS_DATARANGE_VIDEO2;
  3098.  
  3099. typedef struct tagKS_DATARANGE_MPEG1_VIDEO {
  3100.     KSDATARANGE DataRange;
  3101.     BOOL bFixedSizeSamples; // all samples same size?
  3102.     BOOL bTemporalCompression; // all I frames?
  3103.     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
  3104.     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
  3105.     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
  3106.     KS_MPEG1VIDEOINFO VideoInfoHeader; // default format
  3107. } KS_DATARANGE_MPEG1_VIDEO, *PKS_DATARANGE_MPEG1_VIDEO;
  3108.  
  3109. typedef struct tagKS_DATARANGE_MPEG2_VIDEO {
  3110.    KSDATARANGE                  DataRange;
  3111.    BOOL                         bFixedSizeSamples;      // all samples same size?
  3112.    BOOL                         bTemporalCompression;   // all I frames?
  3113.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  3114.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  3115.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  3116.    KS_MPEGVIDEOINFO2            VideoInfoHeader;        // default format
  3117. } KS_DATARANGE_MPEG2_VIDEO, *PKS_DATARANGE_MPEG2_VIDEO;
  3118.  
  3119. typedef struct tagKS_DATARANGE_VIDEO_PALETTE {
  3120.    KSDATARANGE                  DataRange;
  3121.    BOOL                         bFixedSizeSamples;      // all samples same size?
  3122.    BOOL                         bTemporalCompression;   // all I frames?
  3123.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  3124.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  3125.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  3126.    KS_VIDEOINFO                 VideoInfo;              // default format
  3127. } KS_DATARANGE_VIDEO_PALETTE, *PKS_DATARANGE_VIDEO_PALETTE;
  3128.  
  3129. typedef struct tagKS_DATARANGE_VIDEO_VBI {
  3130.    KSDATARANGE                  DataRange;
  3131.    BOOL                         bFixedSizeSamples;      // all samples same size?
  3132.    BOOL                         bTemporalCompression;   // all I frames?
  3133.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  3134.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  3135.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  3136.    KS_VBIINFOHEADER             VBIInfoHeader;          // default format
  3137. } KS_DATARANGE_VIDEO_VBI, *PKS_DATARANGE_VIDEO_VBI;
  3138.  
  3139. typedef struct tagKS_DATARANGE_ANALOGVIDEO {
  3140.    KSDATARANGE                  DataRange;
  3141.    KS_ANALOGVIDEOINFO           AnalogVideoInfo;
  3142. } KS_DATARANGE_ANALOGVIDEO, *PKS_DATARANGE_ANALOGVIDEO;
  3143.  
  3144. //===========================================================================
  3145. // StreamDescriptionFlags
  3146. //
  3147. // These define the "purpose" of each video stream
  3148. //===========================================================================
  3149.  
  3150. #define KS_VIDEOSTREAM_PREVIEW          0x0001  // Preview stream
  3151. #define KS_VIDEOSTREAM_CAPTURE          0x0002  // Capture stream
  3152. #define KS_VIDEOSTREAM_VBI              0x0010  // Field1 VBI
  3153. #define KS_VIDEOSTREAM_NABTS            0x0020  // Field1 NABTS
  3154. #define KS_VIDEOSTREAM_CC               0x0100  // Closed Captioning
  3155. #define KS_VIDEOSTREAM_EDS              0x0200  // Extended Data Services
  3156. #define KS_VIDEOSTREAM_TELETEXT         0x0400  // Field1 Teletext only
  3157. #define KS_VIDEOSTREAM_STILL            0x1000  // Still image input
  3158. #define KS_VIDEOSTREAM_IS_VPE           0x8000  // Is a VPE based stream?
  3159.  
  3160. // MemoryAllocationFlags
  3161. #define KS_VIDEO_ALLOC_VPE_SYSTEM       0x0001  // VPE surface in system memory
  3162. #define KS_VIDEO_ALLOC_VPE_DISPLAY      0x0002  // VPE surface in display memory
  3163. #define KS_VIDEO_ALLOC_VPE_AGP          0x0004  // VPE surface in AGP memory
  3164.  
  3165. //////////////////////////////////////////////////////////////
  3166. // Capture driver VBI property sets
  3167. //////////////////////////////////////////////////////////////
  3168.  
  3169. // {F162C607-7B35-496f-AD7F-2DCA3B46B718}
  3170. #define STATIC_KSPROPSETID_VBICAP_PROPERTIES\
  3171.     0xf162c607, 0x7b35, 0x496f, 0xad, 0x7f, 0x2d, 0xca, 0x3b, 0x46, 0xb7, 0x18
  3172. DEFINE_GUIDSTRUCT("F162C607-7B35-496f-AD7F-2DCA3B46B718", KSPROPSETID_VBICAP_PROPERTIES);
  3173. #define KSPROPSETID_VBICAP_PROPERTIES DEFINE_GUIDNAMED(KSPROPSETID_VBICAP_PROPERTIES)
  3174.  
  3175. typedef enum {
  3176.     KSPROPERTY_VBICAP_PROPERTIES_PROTECTION = 0x01,
  3177. } KSPROPERTY_VBICAP;
  3178.  
  3179. typedef struct _VBICAP_PROPERTIES_PROTECTION_S {
  3180.     KSPROPERTY Property;
  3181.     ULONG      StreamIndex;                     // Index of stream
  3182.     ULONG      Status;
  3183. } VBICAP_PROPERTIES_PROTECTION_S, *PVBICAP_PROPERTIES_PROTECTION_S;
  3184. #define KS_VBICAP_PROTECTION_MV_PRESENT     0x0001L
  3185. #define KS_VBICAP_PROTECTION_MV_HARDWARE    0x0002L
  3186. #define KS_VBICAP_PROTECTION_MV_DETECTED    0x0004L
  3187.  
  3188.  
  3189. /***************************************************************************/
  3190. /* VBI Related GUIDs, structs and properties for codecs(generic, cc, nabts)*/
  3191. /***************************************************************************/
  3192.  
  3193. ///////////////////////////////////////////////////////////////////////////////////////
  3194. // IP/NABTS Protocol Reserved Group IDs - Overall Range 0x800-0x8FF [Decimal 2048-2079]
  3195. // Intervening values(0-F) are used if there are multiple providers at a particular tier
  3196. ///////////////////////////////////////////////////////////////////////////////////////
  3197.  
  3198. // Used by individual content creators in show footage/data
  3199. #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE                 0x800
  3200. #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE      0x810
  3201.  
  3202. // Used by production company in finished show data
  3203. #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE       0x820
  3204. #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE    0x830
  3205.  
  3206. // Used by broadcast syndicates in syndicated show data
  3207. #define KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE          0x840
  3208. #define KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE       0x850
  3209.  
  3210. // Used by tv networks in network television data
  3211. #define KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE             0x860
  3212. #define KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE          0x870
  3213.  
  3214. // Used by telvision stations in local programming data
  3215. #define KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE       0x880
  3216. #define KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE    0x890
  3217.  
  3218. // Used by cable system in cable head-end originated data
  3219. #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE       0x8A0
  3220. #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE    0x8B0
  3221.  
  3222. // The values between 0x8C0 - 0x8EF are reserved for future expansion
  3223.  
  3224. // Used by Microsoft for Testing purposes (0x8F0 - 0x8FF)
  3225. #define KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE     0x8F0
  3226.  
  3227. //////////////////////////////////////////////////////////////
  3228. // Stream Format FEC-corrected NABTS bundles
  3229. //////////////////////////////////////////////////////////////
  3230.  
  3231. #define STATIC_KSDATAFORMAT_TYPE_NABTS \
  3232.  0xe757bca0, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  3233. DEFINE_GUIDSTRUCT("E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_TYPE_NABTS);
  3234. #define KSDATAFORMAT_TYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_NABTS)
  3235.  
  3236. #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS_FEC \
  3237.  0xe757bca1, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  3238. DEFINE_GUIDSTRUCT("E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_SUBTYPE_NABTS_FEC);
  3239. #define KSDATAFORMAT_SUBTYPE_NABTS_FEC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS_FEC)
  3240.  
  3241.  
  3242. //////////////////////////////////////////////////////////////
  3243. // NABTS Bundle data structure definition
  3244. //////////////////////////////////////////////////////////////
  3245.  
  3246. #define MAX_NABTS_VBI_LINES_PER_FIELD   11
  3247. #define NABTS_LINES_PER_BUNDLE          16
  3248. #define NABTS_PAYLOAD_PER_LINE          28
  3249. #define NABTS_BYTES_PER_LINE            36
  3250.  
  3251. typedef struct _NABTSFEC_BUFFER {
  3252.     ULONG       dataSize;
  3253.     USHORT      groupID;
  3254.     USHORT      Reserved;
  3255.     UCHAR       data[NABTS_LINES_PER_BUNDLE * NABTS_PAYLOAD_PER_LINE];
  3256. } NABTSFEC_BUFFER, *PNABTSFEC_BUFFER;
  3257.  
  3258. //////////////////////////////////////////////////////////////
  3259. // vbi codec filtering pin properties
  3260. //////////////////////////////////////////////////////////////
  3261.  
  3262. #define STATIC_KSPROPSETID_VBICodecFiltering \
  3263.     0xcafeb0caL, 0x8715, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0xc0, 0xed, 0xba, 0xbe
  3264. DEFINE_GUIDSTRUCT("cafeb0ca-8715-11d0-bd6a-0035c0edbabe", KSPROPSETID_VBICodecFiltering);
  3265. #define KSPROPSETID_VBICodecFiltering DEFINE_GUIDNAMED(KSPROPSETID_VBICodecFiltering)
  3266.  
  3267. typedef enum {
  3268.     KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY = 0x01,
  3269.     KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  3270.     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  3271.     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  3272.     KSPROPERTY_VBICODECFILTERING_STATISTICS,
  3273. } KSPROPERTY_VBICODECFILTERING;
  3274.  
  3275. typedef struct _VBICODECFILTERING_SCANLINES {
  3276.     DWORD   DwordBitArray[32];      // An array of scanline bits 0..1024(32*32)
  3277. } VBICODECFILTERING_SCANLINES, *PVBICODECFILTERING_SCANLINES;
  3278.  
  3279. typedef struct _VBICODECFILTERING_NABTS_SUBSTREAMS {
  3280.     DWORD   SubstreamMask[128];   // An array of 4096 bits (one for each NABTS GroupID)
  3281. } VBICODECFILTERING_NABTS_SUBSTREAMS, *PVBICODECFILTERING_NABTS_SUBSTREAMS;
  3282.  
  3283. typedef struct _VBICODECFILTERING_CC_SUBSTREAMS {
  3284.     DWORD   SubstreamMask;        // An array of 32 bits (see KS_CC_SUBSTREAM *)
  3285. } VBICODECFILTERING_CC_SUBSTREAMS, *PVBICODECFILTERING_CC_SUBSTREAMS;
  3286.  
  3287. // These KS_CC_SUBSTREAM_* bitmasks are used with VBICODECFILTERING_CC_SUBSTREAMS
  3288. #define KS_CC_SUBSTREAM_ODD               0x0001L // Unfiltered Field 1 Data
  3289. #define KS_CC_SUBSTREAM_EVEN              0x0002L // Unfiltered Field 2 Data
  3290.  
  3291. // The following flags describe CC field 1 substreams: CC1,CC2,TT1,TT2
  3292. #define KS_CC_SUBSTREAM_FIELD1_MASK          0x00F0L
  3293. #define KS_CC_SUBSTREAM_SERVICE_CC1       0x0010L
  3294. #define KS_CC_SUBSTREAM_SERVICE_CC2       0x0020L
  3295. #define KS_CC_SUBSTREAM_SERVICE_T1        0x0040L
  3296. #define KS_CC_SUBSTREAM_SERVICE_T2        0x0080L
  3297.  
  3298. // The following flags describe CC field 2 substreams: CC3,CC4,TT3,TT4,XDS
  3299. #define KS_CC_SUBSTREAM_FIELD2_MASK       0x1F00L
  3300. #define KS_CC_SUBSTREAM_SERVICE_CC3       0x0100L
  3301. #define KS_CC_SUBSTREAM_SERVICE_CC4       0x0200L
  3302. #define KS_CC_SUBSTREAM_SERVICE_T3        0x0400L
  3303. #define KS_CC_SUBSTREAM_SERVICE_T4        0x0800L
  3304. #define KS_CC_SUBSTREAM_SERVICE_XDS       0x1000L
  3305.  
  3306. // Special Note: field 1 or 2 substreams are usually on found on field 1 and 2 respectively
  3307. // If the VBI odd/even polarity is reversed, the correct filtered data will still be found.
  3308.  
  3309. ///////////////////////////////////////////////////////////////////
  3310. // Hardware decoded CC stream format
  3311. ///////////////////////////////////////////////////////////////////
  3312.  
  3313. #define CC_MAX_HW_DECODE_LINES 12
  3314. typedef struct _CC_BYTE_PAIR {
  3315.     BYTE        Decoded[2];
  3316.     USHORT      Reserved;
  3317. } CC_BYTE_PAIR, *PCC_BYTE_PAIR;
  3318.  
  3319. typedef struct _CC_HW_FIELD {
  3320.     VBICODECFILTERING_SCANLINES  ScanlinesRequested;
  3321.     ULONG                        fieldFlags;    // KS_VBI_FLAG_FIELD1,2
  3322.     LONGLONG                     PictureNumber;
  3323.     CC_BYTE_PAIR                 Lines[CC_MAX_HW_DECODE_LINES];
  3324. } CC_HW_FIELD, *PCC_HW_FIELD;
  3325.  
  3326. ///////////////////////////////////////////////////////////////////
  3327. // Raw NABTS stream format (TYPE_NABTS, SUBTYPE_NABTS)
  3328. ///////////////////////////////////////////////////////////////////
  3329.  
  3330. // These low-level structures are byte packed( -Zp1 )
  3331. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  3332. #include <pshpack1.h>
  3333. #endif
  3334. typedef struct _NABTS_BUFFER_LINE {
  3335.     BYTE                            Confidence;
  3336.     BYTE                            Bytes[NABTS_BYTES_PER_LINE];
  3337. } NABTS_BUFFER_LINE, *PNABTS_BUFFER_LINE;
  3338.  
  3339. #define NABTS_BUFFER_PICTURENUMBER_SUPPORT 1
  3340. typedef struct _NABTS_BUFFER {
  3341.     VBICODECFILTERING_SCANLINES     ScanlinesRequested;
  3342.     LONGLONG                        PictureNumber;
  3343.     NABTS_BUFFER_LINE               NabtsLines[MAX_NABTS_VBI_LINES_PER_FIELD];
  3344. } NABTS_BUFFER, *PNABTS_BUFFER;
  3345. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  3346. #include <poppack.h>
  3347. #endif
  3348.  
  3349. //////////////////////////////////////////////////////////////
  3350. // WST Codec Teletext Media Sample Format
  3351. //////////////////////////////////////////////////////////////
  3352.  
  3353. #define WST_TVTUNER_CHANGE_BEGIN_TUNE    0x1000L  // Starting a tuning operation
  3354. #define WST_TVTUNER_CHANGE_END_TUNE      0x2000L  // Ending a tuning operation
  3355.  
  3356. #define MAX_WST_VBI_LINES_PER_FIELD   17
  3357. #define WST_BYTES_PER_LINE            42
  3358.  
  3359. typedef struct _WST_BUFFER_LINE {
  3360.     BYTE                            Confidence;
  3361.     BYTE                            Bytes[WST_BYTES_PER_LINE];
  3362. } WST_BUFFER_LINE, *PWST_BUFFER_LINE;
  3363.  
  3364. typedef struct _WST_BUFFER {
  3365.     VBICODECFILTERING_SCANLINES        ScanlinesRequested;
  3366.     WST_BUFFER_LINE                    WstLines[MAX_WST_VBI_LINES_PER_FIELD];
  3367. } WST_BUFFER, *PWST_BUFFER;
  3368.  
  3369. //
  3370. // Common codec statistics
  3371. //
  3372.  
  3373. typedef struct _VBICODECFILTERING_STATISTICS_COMMON {
  3374.     DWORD   InputSRBsProcessed;         // upstream SRBs received
  3375.     DWORD   OutputSRBsProcessed;        // downstream SRBs sent
  3376.     DWORD   SRBsIgnored;                // SRBs ignored due to no requests
  3377.     DWORD   InputSRBsMissing;           // SRBs dropped upstream
  3378.     DWORD   OutputSRBsMissing;          // Output dropped because no SRB pending
  3379.     DWORD   OutputFailures;             // dropped because of other failure
  3380.     DWORD   InternalErrors;             // could not process due to int. failure
  3381.     DWORD   ExternalErrors;             // could not process due to ext. failure
  3382.     DWORD   InputDiscontinuities;       // discontinuities received
  3383.     DWORD   DSPFailures;                // DSP confidence failure
  3384.     DWORD   TvTunerChanges;             // number of received KS_TVTUNER_CHANGE_BEGIN_TUNE and KS_TVTUNER_CHANGE_END_TUNE pairs.
  3385.     DWORD   VBIHeaderChanges;           // number of received KS_VBI_FLAG_VBIINFOHEADER_CHANGE
  3386.     DWORD   LineConfidenceAvg;          // Average of all DSP confidence results
  3387.     DWORD   BytesOutput;                // Bytes sent downstream
  3388. } VBICODECFILTERING_STATISTICS_COMMON, *PVBICODECFILTERING_STATISTICS_COMMON;
  3389.  
  3390. typedef struct _VBICODECFILTERING_STATISTICS_COMMON_PIN {
  3391.     DWORD   SRBsProcessed;              // SRBs sent/received
  3392.     DWORD   SRBsIgnored;                // SRBs ignored due to filtering
  3393.     DWORD   SRBsMissing;                // SRBs not sent/received
  3394.     DWORD   InternalErrors;             // could not send/receive due to int. failure
  3395.     DWORD   ExternalErrors;             // could not send/receive due to ext. failure
  3396.     DWORD   Discontinuities;            // discontinuities received/sent
  3397.     DWORD   LineConfidenceAvg;          // Average of all DSP confidence results for this pin
  3398.     DWORD   BytesOutput;                // Bytes sent downstream
  3399. } VBICODECFILTERING_STATISTICS_COMMON_PIN, *PVBICODECFILTERING_STATISTICS_COMMON_PIN;
  3400.  
  3401. //
  3402. // Codec-specific statistics - NABTS
  3403. //
  3404.  
  3405. typedef struct _VBICODECFILTERING_STATISTICS_NABTS {
  3406.     VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
  3407.     DWORD   FECBundleBadLines;          // Un-FEC-correctable lines
  3408.     DWORD   FECQueueOverflows;          // Number of times FEC queue overflowed
  3409.     DWORD   FECCorrectedLines;          // Lines CSUM corrected by FEC
  3410.     DWORD   FECUncorrectableLines;      // FEC input lines not CSUM correctable
  3411.     DWORD   BundlesProcessed;           // Bundles received from FEC
  3412.     DWORD   BundlesSent2IP;             // Bundles sent to IP driver
  3413.     DWORD   FilteredLines;              // Lines processed and then dropped
  3414.                                         // because no one was interested
  3415. } VBICODECFILTERING_STATISTICS_NABTS, *PVBICODECFILTERING_STATISTICS_NABTS;
  3416.  
  3417. typedef struct _VBICODECFILTERING_STATISTICS_NABTS_PIN {
  3418.     VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
  3419. } VBICODECFILTERING_STATISTICS_NABTS_PIN, *PVBICODECFILTERING_STATISTICS_NABTS_PIN;
  3420.  
  3421. //
  3422. // Codec-specific statistics - Closed Caption
  3423. //
  3424.  
  3425. typedef struct _VBICODECFILTERING_STATISTICS_CC {
  3426.     VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
  3427. } VBICODECFILTERING_STATISTICS_CC, *PVBICODECFILTERING_STATISTICS_CC;
  3428.  
  3429.  
  3430. typedef struct _VBICODECFILTERING_STATISTICS_CC_PIN {
  3431.     VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
  3432. } VBICODECFILTERING_STATISTICS_CC_PIN, *PVBICODECFILTERING_STATISTICS_CC_PIN;
  3433.  
  3434. //
  3435. // Codec-specific statistics - Closed Caption
  3436. //
  3437.  
  3438. typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT {
  3439.     VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
  3440. } VBICODECFILTERING_STATISTICS_TELETEXT, *PVBICODECFILTERING_STATISTICS_TELETEXT;
  3441.  
  3442. typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT_PIN {
  3443.     VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
  3444. } VBICODECFILTERING_STATISTICS_TELETEXT_PIN, *PVBICODECFILTERING_STATISTICS_TELETEXT_PIN;
  3445.  
  3446. ////////////////////////////////////////////////////////////////////////////
  3447. // VBI codec property structures(based on KSPROPERTY_VBICODECFILTERING enum)
  3448. ////////////////////////////////////////////////////////////////////////////
  3449.  
  3450. // *** Most codecs support this property
  3451. //    KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY
  3452. //    KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  3453. typedef struct {
  3454.     KSPROPERTY                          Property;
  3455.     VBICODECFILTERING_SCANLINES         Scanlines;
  3456. } KSPROPERTY_VBICODECFILTERING_SCANLINES_S, *PKSPROPERTY_VBICODECFILTERING_SCANLINES_S;
  3457.  
  3458. // *** NABTS codecs support this property
  3459. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  3460. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  3461. typedef struct {
  3462.     KSPROPERTY                          Property;
  3463.     VBICODECFILTERING_NABTS_SUBSTREAMS  Substreams;
  3464. } KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S;
  3465.  
  3466. // *** Closed captioning codecs support this property
  3467. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  3468. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  3469. typedef struct {
  3470.     KSPROPERTY                              Property;
  3471.     VBICODECFILTERING_CC_SUBSTREAMS         Substreams;
  3472. } KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S;
  3473.  
  3474. // *** Most codecs support these versions of the global and pin properties
  3475. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  3476. typedef struct {
  3477.     KSPROPERTY                              Property;
  3478.     VBICODECFILTERING_STATISTICS_COMMON     Statistics;
  3479. } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S;
  3480.  
  3481. typedef struct {
  3482.     KSPROPERTY                              Property;
  3483.     VBICODECFILTERING_STATISTICS_COMMON_PIN Statistics;
  3484. } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S;
  3485.  
  3486. // *** NABTS codecs support this version of the global and pin properties
  3487. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  3488. typedef struct {
  3489.     KSPROPERTY                              Property;
  3490.     VBICODECFILTERING_STATISTICS_NABTS      Statistics;
  3491. } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S;
  3492.  
  3493. typedef struct {
  3494.     KSPROPERTY                              Property;
  3495.     VBICODECFILTERING_STATISTICS_NABTS_PIN  Statistics;
  3496. } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S;
  3497.  
  3498. // *** Closed captioning codecs support this version of the global and pin properties
  3499. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  3500.  
  3501. typedef struct {
  3502.     KSPROPERTY                              Property;
  3503.     VBICODECFILTERING_STATISTICS_CC         Statistics;
  3504. } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S;
  3505.  
  3506. typedef struct {
  3507.     KSPROPERTY                              Property;
  3508.     VBICODECFILTERING_STATISTICS_CC_PIN     Statistics;
  3509. } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S;
  3510.  
  3511. // Standard Pin Names for the video capture filter
  3512. //===========================================================================
  3513.  
  3514. #define STATIC_PINNAME_VIDEO_CAPTURE \
  3515.     0xfb6c4281, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3516. #define STATIC_PINNAME_CAPTURE STATIC_PINNAME_VIDEO_CAPTURE
  3517. DEFINE_GUIDSTRUCT("FB6C4281-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CAPTURE);
  3518. #define PINNAME_VIDEO_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CAPTURE)
  3519. #define PINNAME_CAPTURE PINNAME_VIDEO_CAPTURE
  3520.  
  3521. #define STATIC_PINNAME_VIDEO_CC_CAPTURE \
  3522.     0x1aad8061, 0x12d, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
  3523. #define STATIC_PINNAME_CC_CAPTURE STATIC_PINNAME_VIDEO_CC_CAPTURE
  3524. DEFINE_GUIDSTRUCT("1AAD8061-012D-11d2-B4B1-00A0D102CFBE", PINNAME_VIDEO_CC_CAPTURE);
  3525. #define PINNAME_VIDEO_CC_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CC_CAPTURE)
  3526.  
  3527. #define STATIC_PINNAME_VIDEO_NABTS_CAPTURE \
  3528.     0x29703660, 0x498a, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
  3529. #define STATIC_PINNAME_NABTS_CAPTURE STATIC_PINNAME_VIDEO_NABTS_CAPTURE
  3530. DEFINE_GUIDSTRUCT("29703660-498A-11d2-B4B1-00A0D102CFBE", PINNAME_VIDEO_NABTS_CAPTURE);
  3531. #define PINNAME_VIDEO_NABTS_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS_CAPTURE)
  3532.  
  3533. #define STATIC_PINNAME_VIDEO_PREVIEW \
  3534.     0xfb6c4282, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3535. #define STATIC_PINNAME_PREVIEW STATIC_PINNAME_VIDEO_PREVIEW
  3536. DEFINE_GUIDSTRUCT("FB6C4282-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_PREVIEW);
  3537. #define PINNAME_VIDEO_PREVIEW DEFINE_GUIDNAMED(PINNAME_VIDEO_PREVIEW)
  3538. #define PINNAME_PREVIEW PINNAME_VIDEO_PREVIEW
  3539.  
  3540. #define STATIC_PINNAME_VIDEO_ANALOGVIDEOIN \
  3541.     0xfb6c4283, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3542. DEFINE_GUIDSTRUCT("FB6C4283-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_ANALOGVIDEOIN);
  3543. #define PINNAME_VIDEO_ANALOGVIDEOIN DEFINE_GUIDNAMED(PINNAME_VIDEO_ANALOGVIDEOIN)
  3544.  
  3545. #define STATIC_PINNAME_VIDEO_VBI \
  3546.     0xfb6c4284, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3547. DEFINE_GUIDSTRUCT("FB6C4284-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VBI);
  3548. #define PINNAME_VIDEO_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VBI)
  3549.  
  3550. #define STATIC_PINNAME_VIDEO_VIDEOPORT \
  3551.     0xfb6c4285, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3552. DEFINE_GUIDSTRUCT("FB6C4285-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT);
  3553. #define PINNAME_VIDEO_VIDEOPORT DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT)
  3554.  
  3555. #define STATIC_PINNAME_VIDEO_NABTS \
  3556.     0xfb6c4286, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3557. DEFINE_GUIDSTRUCT("FB6C4286-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_NABTS);
  3558. #define PINNAME_VIDEO_NABTS DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS)
  3559.  
  3560. #define STATIC_PINNAME_VIDEO_EDS \
  3561.     0xfb6c4287, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3562. DEFINE_GUIDSTRUCT("FB6C4287-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_EDS);
  3563. #define PINNAME_VIDEO_EDS DEFINE_GUIDNAMED(PINNAME_VIDEO_EDS)
  3564.  
  3565. #define STATIC_PINNAME_VIDEO_TELETEXT \
  3566.     0xfb6c4288, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3567. DEFINE_GUIDSTRUCT("FB6C4288-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TELETEXT);
  3568. #define PINNAME_VIDEO_TELETEXT DEFINE_GUIDNAMED(PINNAME_VIDEO_TELETEXT)
  3569.  
  3570. #define STATIC_PINNAME_VIDEO_CC \
  3571.     0xfb6c4289, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3572. DEFINE_GUIDSTRUCT("FB6C4289-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CC);
  3573. #define PINNAME_VIDEO_CC DEFINE_GUIDNAMED(PINNAME_VIDEO_CC)
  3574.  
  3575. #define STATIC_PINNAME_VIDEO_STILL \
  3576.     0xfb6c428A, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3577. DEFINE_GUIDSTRUCT("FB6C428A-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_STILL);
  3578. #define PINNAME_VIDEO_STILL DEFINE_GUIDNAMED(PINNAME_VIDEO_STILL)
  3579.  
  3580. #define STATIC_PINNAME_VIDEO_TIMECODE \
  3581.     0xfb6c428B, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3582. DEFINE_GUIDSTRUCT("FB6C428B-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TIMECODE);
  3583. #define PINNAME_VIDEO_TIMECODE DEFINE_GUIDNAMED(PINNAME_VIDEO_TIMECODE)
  3584.  
  3585. #define STATIC_PINNAME_VIDEO_VIDEOPORT_VBI \
  3586.     0xfb6c428C, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3587. DEFINE_GUIDSTRUCT("FB6C428C-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT_VBI);
  3588. #define PINNAME_VIDEO_VIDEOPORT_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT_VBI)
  3589.  
  3590. //===========================================================================
  3591. // KSSTREAM_HEADER extensions for digital video
  3592. //===========================================================================
  3593.  
  3594. #define KS_VIDEO_FLAG_FRAME      0x0000L        // Frame or Field (default is frame)
  3595. #define KS_VIDEO_FLAG_FIELD1     0x0001L
  3596. #define KS_VIDEO_FLAG_FIELD2     0x0002L
  3597.  
  3598. #define KS_VIDEO_FLAG_I_FRAME    0x0000L        // I, B, or P (default is I)
  3599. #define KS_VIDEO_FLAG_P_FRAME    0x0010L
  3600. #define KS_VIDEO_FLAG_B_FRAME    0x0020L
  3601.  
  3602. typedef struct tagKS_FRAME_INFO {
  3603.     ULONG                   ExtendedHeaderSize; // Size of this extended header
  3604.     DWORD                   dwFrameFlags;       // Field1, Field2, or Frame
  3605.     LONGLONG                PictureNumber;
  3606.     LONGLONG                DropCount;
  3607.  
  3608.     // The following are only set when using OverlayMixer
  3609.     HANDLE                  hDirectDraw;        // user mode DDraw handle
  3610.     HANDLE                  hSurfaceHandle;     // user mode surface handle
  3611.     RECT                    DirectDrawRect;     // portion of surface locked
  3612.     // Reserved fields, never reference these
  3613.     DWORD                   Reserved1;
  3614.     DWORD                   Reserved2;
  3615.     DWORD                   Reserved3;
  3616.     DWORD                   Reserved4;
  3617. } KS_FRAME_INFO, *PKS_FRAME_INFO;
  3618.  
  3619. //===========================================================================
  3620. // KSSTREAM_HEADER extensions for VBI
  3621. //===========================================================================
  3622.  
  3623. #define KS_VBI_FLAG_FIELD1               0x0001L
  3624. #define KS_VBI_FLAG_FIELD2               0x0002L
  3625.  
  3626. #define KS_VBI_FLAG_MV_PRESENT           0x0100L
  3627. #define KS_VBI_FLAG_MV_HARDWARE          0x0200L
  3628. #define KS_VBI_FLAG_MV_DETECTED          0x0400L
  3629.  
  3630. #define KS_VBI_FLAG_TVTUNER_CHANGE       0x0010L // TvTunerChangeInfo is valid
  3631. #define KS_VBI_FLAG_VBIINFOHEADER_CHANGE 0x0020L // VBIInfoHeader is valid
  3632.  
  3633. typedef struct tagKS_VBI_FRAME_INFO {
  3634.     ULONG                   ExtendedHeaderSize; // Size of this extended header
  3635.     DWORD                   dwFrameFlags;  // Field1, Field2, or Frame; & etc
  3636.     LONGLONG                PictureNumber; // Test only?
  3637.     LONGLONG                DropCount;     // Test only?
  3638.     DWORD                   dwSamplingFrequency;
  3639.     KS_TVTUNER_CHANGE_INFO  TvTunerChangeInfo;
  3640.     KS_VBIINFOHEADER        VBIInfoHeader;
  3641. } KS_VBI_FRAME_INFO, *PKS_VBI_FRAME_INFO;
  3642.  
  3643.  
  3644. //===========================================================================
  3645. // Analog video formats, used with:
  3646. //      Analog Video Decoders
  3647. //      TVTuners
  3648. //      Analog Video Encoders
  3649. //
  3650. // XXX_STANDARDS_SUPPORTED returns a bitmask
  3651. //===========================================================================
  3652.  
  3653. typedef enum
  3654. {
  3655.     KS_AnalogVideo_None     = 0x00000000,  // This is a digital sensor
  3656.     KS_AnalogVideo_NTSC_M   = 0x00000001,  //        75 IRE Setup
  3657.     KS_AnalogVideo_NTSC_M_J = 0x00000002,  // Japan,  0 IRE Setup
  3658.     KS_AnalogVideo_NTSC_433 = 0x00000004,
  3659.  
  3660.     KS_AnalogVideo_PAL_B    = 0x00000010,
  3661.     KS_AnalogVideo_PAL_D    = 0x00000020,
  3662.     KS_AnalogVideo_PAL_G    = 0x00000040,
  3663.     KS_AnalogVideo_PAL_H    = 0x00000080,
  3664.     KS_AnalogVideo_PAL_I    = 0x00000100,
  3665.     KS_AnalogVideo_PAL_M    = 0x00000200,
  3666.     KS_AnalogVideo_PAL_N    = 0x00000400,
  3667.  
  3668.     KS_AnalogVideo_PAL_60   = 0x00000800,
  3669.  
  3670.     KS_AnalogVideo_SECAM_B  = 0x00001000,
  3671.     KS_AnalogVideo_SECAM_D  = 0x00002000,
  3672.     KS_AnalogVideo_SECAM_G  = 0x00004000,
  3673.     KS_AnalogVideo_SECAM_H  = 0x00008000,
  3674.     KS_AnalogVideo_SECAM_K  = 0x00010000,
  3675.     KS_AnalogVideo_SECAM_K1 = 0x00020000,
  3676.     KS_AnalogVideo_SECAM_L  = 0x00040000,
  3677.     KS_AnalogVideo_SECAM_L1 = 0x00080000,
  3678.  
  3679.     KS_AnalogVideo_PAL_N_COMBO
  3680.                             = 0x00100000
  3681. } KS_AnalogVideoStandard;
  3682.  
  3683. #define KS_AnalogVideo_NTSC_Mask  0x00000007
  3684. #define KS_AnalogVideo_PAL_Mask   0x00100FF0
  3685. #define KS_AnalogVideo_SECAM_Mask 0x000FF000
  3686.  
  3687. //===========================================================================
  3688. // Property set definitions
  3689. // The comments show whether a given property is:
  3690. //      R  : READ only
  3691. //      w  : WRITE only
  3692. //      RW : READ / WRITE
  3693. //      O  : Optional (return E_UNSUPPORTED if you don't handle this)
  3694. //===========================================================================
  3695.  
  3696. #define STATIC_PROPSETID_ALLOCATOR_CONTROL\
  3697.     0x53171960, 0x148e, 0x11d2, 0x99, 0x79, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3698. DEFINE_GUIDSTRUCT("53171960-148E-11d2-9979-0000C0CC16BA", PROPSETID_ALLOCATOR_CONTROL);
  3699. #define PROPSETID_ALLOCATOR_CONTROL DEFINE_GUIDNAMED(PROPSETID_ALLOCATOR_CONTROL)
  3700. typedef enum {
  3701.     KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT,      // R O (will allocate exactly this number of buffers)
  3702.     KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE,     // R O (return 2 DWORDs specifying surface size)
  3703.     // W I (informn a capture driver whether interleave capture is possible or
  3704.     //      not - a value of 1 means that interleaved capture is supported)
  3705.     KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS,
  3706.  
  3707.     // R O (if value == 1, then the ovmixer will turn on the DDVP_INTERLEAVE
  3708.     //      flag thus allowing interleaved capture of the video)
  3709.     KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE,
  3710. } KSPROPERTY_ALLOCATOR_CONTROL;
  3711.  
  3712. typedef struct {
  3713.     //KSPROPERTY Property;
  3714.     ULONG    CX;
  3715.     ULONG    CY;
  3716. } KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S, *PKSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S; 
  3717.  
  3718. typedef struct {
  3719.     //KSPROPERTY Property;
  3720.     ULONG    InterleavedCapSupported;
  3721. } KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S, *PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S;
  3722.  
  3723.  
  3724. typedef struct {
  3725.     //KSPROPERTY Property;
  3726.     ULONG    InterleavedCapPossible;
  3727. } KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S, *PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S;
  3728.  
  3729. //===========================================================================
  3730.  
  3731. #define STATIC_PROPSETID_VIDCAP_VIDEOPROCAMP\
  3732.     0xC6E13360L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  3733. DEFINE_GUIDSTRUCT("C6E13360-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOPROCAMP);
  3734. #define PROPSETID_VIDCAP_VIDEOPROCAMP DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOPROCAMP)
  3735.  
  3736. typedef enum {
  3737.     KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS,            // RW O
  3738.     KSPROPERTY_VIDEOPROCAMP_CONTRAST,              // RW O
  3739.     KSPROPERTY_VIDEOPROCAMP_HUE,                   // RW O
  3740.     KSPROPERTY_VIDEOPROCAMP_SATURATION,            // RW O
  3741.     KSPROPERTY_VIDEOPROCAMP_SHARPNESS,             // RW O
  3742.     KSPROPERTY_VIDEOPROCAMP_GAMMA,                 // RW O
  3743.     KSPROPERTY_VIDEOPROCAMP_COLORENABLE,           // RW O
  3744.     KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE,          // RW O
  3745.     KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION,// RW O
  3746.     KSPROPERTY_VIDEOPROCAMP_GAIN,                  // RW O
  3747. } KSPROPERTY_VIDCAP_VIDEOPROCAMP;
  3748.  
  3749. typedef struct {
  3750.     KSPROPERTY Property;
  3751.     LONG   Value;                       // Value to set or get
  3752.     ULONG  Flags;                       // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  3753.     ULONG  Capabilities;                // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  3754. } KSPROPERTY_VIDEOPROCAMP_S, *PKSPROPERTY_VIDEOPROCAMP_S;
  3755.  
  3756. #define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO        0X0001L
  3757. #define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL      0X0002L
  3758.  
  3759. //===========================================================================
  3760.  
  3761. #define STATIC_PROPSETID_TUNER\
  3762.     0x6a2e0605L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3763. DEFINE_GUIDSTRUCT("6a2e0605-28e4-11d0-a18c-00a0c9118956", PROPSETID_TUNER);
  3764. #define PROPSETID_TUNER DEFINE_GUIDNAMED(PROPSETID_TUNER)
  3765.  
  3766. typedef enum {
  3767.     KSPROPERTY_TUNER_CAPS,              // R  -overall device capabilities
  3768.     KSPROPERTY_TUNER_MODE_CAPS,         // R  -capabilities in this mode
  3769.     KSPROPERTY_TUNER_MODE,              // RW -set a mode (TV, FM, AM, DSS)
  3770.     KSPROPERTY_TUNER_STANDARD,          // R  -get TV standard (only if TV mode)
  3771.     KSPROPERTY_TUNER_FREQUENCY,         // RW -set/get frequency
  3772.     KSPROPERTY_TUNER_INPUT,             // RW -select an input
  3773.     KSPROPERTY_TUNER_STATUS,            // R  -tuning status
  3774.     KSPROPERTY_TUNER_IF_MEDIUM          // R O-Medium for IF or Transport Pin
  3775. } KSPROPERTY_TUNER;
  3776.  
  3777. typedef enum {
  3778.     KSPROPERTY_TUNER_MODE_TV            = 0X0001,
  3779.     KSPROPERTY_TUNER_MODE_FM_RADIO      = 0X0002,
  3780.     KSPROPERTY_TUNER_MODE_AM_RADIO      = 0X0004,
  3781.     KSPROPERTY_TUNER_MODE_DSS           = 0X0008,
  3782.     KSPROPERTY_TUNER_MODE_ATSC          = 0X0010,  // also used for DVB-T, DVB-C
  3783. } KSPROPERTY_TUNER_MODES;
  3784.  
  3785. // Describes how the device tunes.  Only one of these flags may be set
  3786. // in KSPROPERTY_TUNER_MODE_CAPS_S.Strategy
  3787.  
  3788. // Describe how the driver should attempt to tune:
  3789. // EXACT:   just go to the frequency specified (no fine tuning)
  3790. // FINE:    (slow) do an exhaustive search for the best signal
  3791. // COARSE:  (fast) use larger frequency jumps to just determine if any signal
  3792.  
  3793. typedef enum {
  3794.     KS_TUNER_TUNING_EXACT = 1,        // No fine tuning
  3795.     KS_TUNER_TUNING_FINE,             // Fine grained search
  3796.     KS_TUNER_TUNING_COARSE,           // Coarse search
  3797. }KS_TUNER_TUNING_FLAGS;
  3798.  
  3799. typedef enum {
  3800.     KS_TUNER_STRATEGY_PLL             = 0X01, // Tune by PLL offset
  3801.     KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02, // Tune by signal strength
  3802.     KS_TUNER_STRATEGY_DRIVER_TUNES    = 0X04, // Driver does fine tuning
  3803. }KS_TUNER_STRATEGY;
  3804.  
  3805. typedef struct {
  3806.     KSPROPERTY Property;
  3807.     ULONG  ModesSupported;              // KS_PROPERTY_TUNER_MODES_*
  3808.     KSPIN_MEDIUM VideoMedium;           // GUID_NULL (no pin), or GUID
  3809.     KSPIN_MEDIUM TVAudioMedium;         // GUID_NULL (no pin), or GUID
  3810.     KSPIN_MEDIUM RadioAudioMedium;      // GUID_NULL (no pin), or GUID
  3811. } KSPROPERTY_TUNER_CAPS_S, *PKSPROPERTY_TUNER_CAPS_S;
  3812.  
  3813. typedef struct {
  3814.     KSPROPERTY Property;
  3815.     KSPIN_MEDIUM IFMedium;              // GUID_NULL (no pin), or GUID
  3816. } KSPROPERTY_TUNER_IF_MEDIUM_S, *PKSPROPERTY_TUNER_IF_MEDIUM_S;
  3817.  
  3818. typedef struct {
  3819.     KSPROPERTY Property;
  3820.     ULONG  Mode;                        // IN: KSPROPERTY_TUNER_MODE
  3821.     ULONG  StandardsSupported;          // KS_AnalogVideo_* (if TV or DSS)
  3822.     ULONG  MinFrequency;                // Hz
  3823.     ULONG  MaxFrequency;                // Hz
  3824.     ULONG  TuningGranularity;           // Hz
  3825.     ULONG  NumberOfInputs;              // count of inputs
  3826.     ULONG  SettlingTime;                // milliSeconds
  3827.     ULONG  Strategy;                    // KS_TUNER_STRATEGY
  3828. } KSPROPERTY_TUNER_MODE_CAPS_S, *PKSPROPERTY_TUNER_MODE_CAPS_S;
  3829.  
  3830. typedef struct {
  3831.     KSPROPERTY Property;
  3832.     ULONG  Mode;                        // IN: KSPROPERTY_TUNER_MODE
  3833. } KSPROPERTY_TUNER_MODE_S, *PKSPROPERTY_TUNER_MODE_S;
  3834.  
  3835. typedef struct {
  3836.     KSPROPERTY Property;
  3837.     ULONG  Frequency;                   // Hz
  3838.     ULONG  LastFrequency;               // Hz (last known good)
  3839.     ULONG  TuningFlags;                 // KS_TUNER_TUNING_FLAGS
  3840.     ULONG  VideoSubChannel;             // DSS
  3841.     ULONG  AudioSubChannel;             // DSS
  3842.     ULONG  Channel;                     // VBI decoders
  3843.     ULONG  Country;                     // VBI decoders
  3844. } KSPROPERTY_TUNER_FREQUENCY_S, *PKSPROPERTY_TUNER_FREQUENCY_S;
  3845.  
  3846. typedef struct {
  3847.     KSPROPERTY Property;
  3848.     ULONG  Standard;                    // KS_AnalogVideo_*
  3849. } KSPROPERTY_TUNER_STANDARD_S, *PKSPROPERTY_TUNER_STANDARD_S;
  3850.  
  3851. typedef struct {
  3852.     KSPROPERTY Property;
  3853.     ULONG  InputIndex;                  // 0 to (n-1) inputs
  3854. } KSPROPERTY_TUNER_INPUT_S, *PKSPROPERTY_TUNER_INPUT_S;
  3855.  
  3856. typedef struct {
  3857.     KSPROPERTY Property;
  3858.     ULONG  CurrentFrequency;            // Hz
  3859.     ULONG  PLLOffset;                   // if Strategy.KS_TUNER_STRATEGY_PLL
  3860.     ULONG  SignalStrength;              // if Stretegy.KS_TUNER_STRATEGY_SIGNAL_STRENGTH
  3861.     ULONG  Busy;                        // TRUE if in the process of tuning
  3862. } KSPROPERTY_TUNER_STATUS_S, *PKSPROPERTY_TUNER_STATUS_S;
  3863.  
  3864. #define STATIC_EVENTSETID_TUNER\
  3865.     0x6a2e0606L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3866. DEFINE_GUIDSTRUCT("6a2e0606-28e4-11d0-a18c-00a0c9118956", EVENTSETID_TUNER);
  3867. #define EVENTSETID_TUNER DEFINE_GUIDNAMED(EVENTSETID_TUNER)
  3868.  
  3869. typedef enum {
  3870.     KSEVENT_TUNER_CHANGED
  3871. } KSEVENT_TUNER;
  3872.  
  3873.  
  3874. //===========================================================================
  3875.  
  3876. #define STATIC_PROPSETID_VIDCAP_VIDEOENCODER\
  3877.     0x6a2e0610L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3878. DEFINE_GUIDSTRUCT("6a2e0610-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOENCODER);
  3879. #define PROPSETID_VIDCAP_VIDEOENCODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOENCODER)
  3880.  
  3881. typedef enum {
  3882.     KSPROPERTY_VIDEOENCODER_CAPS,                       // R
  3883.     KSPROPERTY_VIDEOENCODER_STANDARD,                   // RW
  3884.     KSPROPERTY_VIDEOENCODER_COPYPROTECTION,             // RW O
  3885.     KSPROPERTY_VIDEOENCODER_CC_ENABLE,                  // RW O
  3886. } KSPROPERTY_VIDCAP_VIDEOENCODER;
  3887.  
  3888. typedef struct {
  3889.     KSPROPERTY Property;
  3890.     LONG       Value;                   // value to get or set
  3891.     ULONG      Flags;                   //
  3892.     ULONG      Capabilities;            //
  3893. } KSPROPERTY_VIDEOENCODER_S, *PKSPROPERTY_VIDEOENCODER_S;
  3894.  
  3895. //===========================================================================
  3896.  
  3897. #define STATIC_PROPSETID_VIDCAP_VIDEODECODER\
  3898.     0xC6E13350L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  3899. DEFINE_GUIDSTRUCT("C6E13350-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEODECODER);
  3900. #define PROPSETID_VIDCAP_VIDEODECODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEODECODER)
  3901.  
  3902. typedef enum {
  3903.     KSPROPERTY_VIDEODECODER_CAPS,                       // R
  3904.     KSPROPERTY_VIDEODECODER_STANDARD,                   // RW
  3905.     KSPROPERTY_VIDEODECODER_STATUS,                     // R
  3906.     KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE,              // Rw O
  3907.     KSPROPERTY_VIDEODECODER_VCR_TIMING,                 // RW O
  3908. } KSPROPERTY_VIDCAP_VIDEODECODER;
  3909.  
  3910. typedef enum {
  3911.     KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT  = 0X0001, // VP Output can tri-stae
  3912.     KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = 0X0002, // VCR PLL timings
  3913.     KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = 0X0004, // Can indicate valid signal
  3914. }KS_VIDEODECODER_FLAGS;
  3915.  
  3916. typedef struct {
  3917.     KSPROPERTY Property;
  3918.     ULONG      StandardsSupported;      // KS_AnalogVideo_*
  3919.     ULONG      Capabilities;            // KS_VIDEODECODER_FLAGS_*
  3920.     ULONG      SettlingTime;            // milliseconds
  3921.     ULONG      HSyncPerVSync;           // Number of HSync Pulses per VSync
  3922. } KSPROPERTY_VIDEODECODER_CAPS_S, *PKSPROPERTY_VIDEODECODER_CAPS_S;
  3923.  
  3924. typedef struct {
  3925.     KSPROPERTY Property;
  3926.     ULONG      NumberOfLines;           // 525 or 625 lines detected
  3927.     ULONG      SignalLocked;            // TRUE if signal is locked
  3928. } KSPROPERTY_VIDEODECODER_STATUS_S, *PKSPROPERTY_VIDEODECODER_STATUS_S;
  3929.  
  3930. typedef struct {
  3931.     KSPROPERTY Property;
  3932.     ULONG      Value;                   // Get or set a value
  3933. } KSPROPERTY_VIDEODECODER_S, *PKSPROPERTY_VIDEODECODER_S;
  3934.  
  3935. #define STATIC_EVENTSETID_VIDEODECODER\
  3936.     0x6a2e0621L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3937. DEFINE_GUIDSTRUCT("6a2e0621-28e4-11d0-a18c-00a0c9118956", EVENTSETID_VIDEODECODER);
  3938. #define EVENTSETID_VIDEODECODER DEFINE_GUIDNAMED(EVENTSETID_VIDEODECODER)
  3939.  
  3940. typedef enum {
  3941.     KSEVENT_VIDEODECODER_CHANGED
  3942. } KSEVENT_VIDEODECODER;
  3943.  
  3944. //===========================================================================
  3945.  
  3946. #define STATIC_PROPSETID_VIDCAP_CAMERACONTROL\
  3947.     0xC6E13370L, 0x30AC, 0x11d0, 0xa1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  3948. DEFINE_GUIDSTRUCT("C6E13370-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_CAMERACONTROL);
  3949. #define PROPSETID_VIDCAP_CAMERACONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CAMERACONTROL)
  3950.  
  3951. typedef enum {
  3952.     KSPROPERTY_CAMERACONTROL_PAN,                       // RW O
  3953.     KSPROPERTY_CAMERACONTROL_TILT,                      // RW O
  3954.     KSPROPERTY_CAMERACONTROL_ROLL,                      // RW O
  3955.     KSPROPERTY_CAMERACONTROL_ZOOM,                      // RW O
  3956.     KSPROPERTY_CAMERACONTROL_EXPOSURE,                  // RW O
  3957.     KSPROPERTY_CAMERACONTROL_IRIS,                      // RW O
  3958.     KSPROPERTY_CAMERACONTROL_FOCUS,                     // RW O
  3959. } KSPROPERTY_VIDCAP_CAMERACONTROL;
  3960.  
  3961. typedef struct {
  3962.     KSPROPERTY Property;
  3963.     LONG       Value;                   // value to get or set
  3964.     ULONG      Flags;                   // KSPROPERTY_CAMERACONTROL_FLAGS_*
  3965.     ULONG      Capabilities;            // KSPROPERTY_CAMERACONTROL_FLAGS_*
  3966. } KSPROPERTY_CAMERACONTROL_S, *PKSPROPERTY_CAMERACONTROL_S;
  3967.  
  3968. #define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO        0X0001L
  3969. #define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL      0X0002L
  3970.  
  3971. #define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE    0X0000L
  3972. #define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE    0X0010L
  3973.  
  3974.  
  3975. //===========================================================================
  3976.  
  3977. #define STATIC_PROPSETID_VIDCAP_CROSSBAR\
  3978.     0x6a2e0640L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3979. DEFINE_GUIDSTRUCT("6a2e0640-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_CROSSBAR);
  3980. #define PROPSETID_VIDCAP_CROSSBAR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CROSSBAR)
  3981.  
  3982. typedef enum {
  3983.     KSPROPERTY_CROSSBAR_CAPS,                     // R
  3984.     KSPROPERTY_CROSSBAR_PININFO,                  // R
  3985.     KSPROPERTY_CROSSBAR_CAN_ROUTE,                // R
  3986.     KSPROPERTY_CROSSBAR_ROUTE,                    // RW
  3987. } KSPROPERTY_VIDCAP_CROSSBAR;
  3988.  
  3989. typedef struct {
  3990.     KSPROPERTY Property;
  3991.     ULONG  NumberOfInputs;      // the number of audio and video input pins
  3992.     ULONG  NumberOfOutputs;     // the number of audio and video output pins
  3993. } KSPROPERTY_CROSSBAR_CAPS_S, *PKSPROPERTY_CROSSBAR_CAPS_S;
  3994.  
  3995. typedef struct {
  3996.     KSPROPERTY Property;
  3997.     KSPIN_DATAFLOW Direction;     // KSPIN_DATAFLOW_IN or KSPIN_DATAFLOW_OUT?
  3998.     ULONG  Index;                 // Which pin to return data for?
  3999.     ULONG  PinType;               // KS_PhysConn_Video_* or KS_PhysConn_Audio_*
  4000.     ULONG  RelatedPinIndex;       // For video pins, this is the related audio pin
  4001.     KSPIN_MEDIUM  Medium;         // Identifies the hardware connection
  4002. } KSPROPERTY_CROSSBAR_PININFO_S, *PKSPROPERTY_CROSSBAR_PININFO_S;
  4003.  
  4004. typedef struct {
  4005.     KSPROPERTY Property;
  4006.     ULONG  IndexInputPin;        // Zero based index of the input pin
  4007.     ULONG  IndexOutputPin;       // Zero based index of the output pin
  4008.     ULONG  CanRoute;             // returns non-zero on CAN_ROUTE if routing is possible
  4009. } KSPROPERTY_CROSSBAR_ROUTE_S, *PKSPROPERTY_CROSSBAR_ROUTE_S;
  4010.  
  4011. #define STATIC_EVENTSETID_CROSSBAR\
  4012.     0x6a2e0641L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  4013. DEFINE_GUIDSTRUCT("6a2e0641-28e4-11d0-a18c-00a0c9118956", EVENTSETID_CROSSBAR);
  4014. #define EVENTSETID_CROSSBAR DEFINE_GUIDNAMED(EVENTSETID_CROSSBAR)
  4015.  
  4016. typedef enum {
  4017.     KSEVENT_CROSSBAR_CHANGED
  4018. } KSEVENT_CROSSBAR;
  4019.  
  4020. // The following IDs should match the AM equivalents
  4021. typedef enum {
  4022.     KS_PhysConn_Video_Tuner = 1,
  4023.     KS_PhysConn_Video_Composite,
  4024.     KS_PhysConn_Video_SVideo,
  4025.     KS_PhysConn_Video_RGB,
  4026.     KS_PhysConn_Video_YRYBY,
  4027.     KS_PhysConn_Video_SerialDigital,
  4028.     KS_PhysConn_Video_ParallelDigital,
  4029.     KS_PhysConn_Video_SCSI,
  4030.     KS_PhysConn_Video_AUX,
  4031.     KS_PhysConn_Video_1394,
  4032.     KS_PhysConn_Video_USB,
  4033.     KS_PhysConn_Video_VideoDecoder,
  4034.     KS_PhysConn_Video_VideoEncoder,
  4035.     KS_PhysConn_Video_SCART,
  4036.  
  4037.     KS_PhysConn_Audio_Tuner = 4096,
  4038.     KS_PhysConn_Audio_Line,
  4039.     KS_PhysConn_Audio_Mic,
  4040.     KS_PhysConn_Audio_AESDigital,
  4041.     KS_PhysConn_Audio_SPDIFDigital,
  4042.     KS_PhysConn_Audio_SCSI,
  4043.     KS_PhysConn_Audio_AUX,
  4044.     KS_PhysConn_Audio_1394,
  4045.     KS_PhysConn_Audio_USB,
  4046.     KS_PhysConn_Audio_AudioDecoder,
  4047. } KS_PhysicalConnectorType;
  4048.  
  4049.  
  4050. //===========================================================================
  4051.  
  4052. #define STATIC_PROPSETID_VIDCAP_TVAUDIO\
  4053.     0x6a2e0650L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  4054. DEFINE_GUIDSTRUCT("6a2e0650-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_TVAUDIO);
  4055. #define PROPSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(PROPSETID_VIDCAP_TVAUDIO)
  4056.  
  4057. typedef enum {
  4058.     KSPROPERTY_TVAUDIO_CAPS,                            // R
  4059.     KSPROPERTY_TVAUDIO_MODE,                            // RW
  4060.     KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES        // R
  4061. } KSPROPERTY_VIDCAP_TVAUDIO;
  4062.  
  4063. #define KS_TVAUDIO_MODE_MONO           0x0001          // Mono
  4064. #define KS_TVAUDIO_MODE_STEREO         0x0002          // Stereo
  4065. #define KS_TVAUDIO_MODE_LANG_A         0x0010          // Primary language
  4066. #define KS_TVAUDIO_MODE_LANG_B         0x0020          // 2nd avail language
  4067. #define KS_TVAUDIO_MODE_LANG_C         0x0040          // 3rd avail language
  4068.  
  4069. typedef struct {
  4070.     KSPROPERTY Property;
  4071.     ULONG      Capabilities;             // Bitmask of KS_TVAUDIO_MODE_*
  4072.     KSPIN_MEDIUM InputMedium;
  4073.     KSPIN_MEDIUM OutputMedium;
  4074. } KSPROPERTY_TVAUDIO_CAPS_S, *PKSPROPERTY_TVAUDIO_CAPS_S;
  4075.  
  4076. typedef struct {
  4077.     KSPROPERTY Property;
  4078.     ULONG      Mode;                     // KS_TVAUDIO_MODE_*
  4079. } KSPROPERTY_TVAUDIO_S, *PKSPROPERTY_TVAUDIO_S;
  4080.  
  4081.  
  4082. #define STATIC_KSEVENTSETID_VIDCAP_TVAUDIO\
  4083.     0x6a2e0651L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  4084. DEFINE_GUIDSTRUCT("6a2e0651-28e4-11d0-a18c-00a0c9118956", KSEVENTSETID_VIDCAP_TVAUDIO);
  4085. #define KSEVENTSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAP_TVAUDIO)
  4086.  
  4087. typedef enum {
  4088.     KSEVENT_TVAUDIO_CHANGED,
  4089. } KSEVENT_TVAUDIO;
  4090.  
  4091. //===========================================================================
  4092. #define STATIC_PROPSETID_VIDCAP_VIDEOCOMPRESSION\
  4093.     0xC6E13343L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  4094. DEFINE_GUIDSTRUCT("C6E13343-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOCOMPRESSION);
  4095. #define PROPSETID_VIDCAP_VIDEOCOMPRESSION DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCOMPRESSION)
  4096.  
  4097. typedef enum {
  4098.     KSPROPERTY_VIDEOCOMPRESSION_GETINFO,              // R
  4099.     KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE,        // RW
  4100.     KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME, // RW
  4101.     KSPROPERTY_VIDEOCOMPRESSION_QUALITY,              // RW
  4102.     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME,    // W
  4103.     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE,  // W
  4104.     KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE,           // RW
  4105. } KSPROPERTY_VIDCAP_VIDEOCOMPRESSION;
  4106.  
  4107. typedef enum {
  4108.     KS_CompressionCaps_CanQuality = 1,
  4109.     KS_CompressionCaps_CanCrunch = 2,
  4110.     KS_CompressionCaps_CanKeyFrame = 4,
  4111.     KS_CompressionCaps_CanBFrame = 8,
  4112.     KS_CompressionCaps_CanWindow = 0x10,
  4113. } KS_CompressionCaps;
  4114.  
  4115. typedef struct {
  4116.     KSPROPERTY Property;
  4117.     // Note, no VersionString!
  4118.     // Note, no DescriptionString!
  4119.     ULONG      StreamIndex;             // zero based index of stream
  4120.     LONG       DefaultKeyFrameRate;     // Key frame rate
  4121.     LONG       DefaultPFrameRate;       // Predeicted frames per Key frame
  4122.     LONG       DefaultQuality;          // 0 to 10000
  4123.     LONG       NumberOfQualitySettings; // How many discreet quality settings?
  4124.     LONG       Capabilities;            // KS_CompressionCaps_*
  4125. } KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S, *PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S;
  4126.  
  4127. typedef struct {
  4128.     KSPROPERTY Property;
  4129.     ULONG      StreamIndex;             // zero based index of stream
  4130.     LONG       Value;                   // value to get or set
  4131. } KSPROPERTY_VIDEOCOMPRESSION_S, *PKSPROPERTY_VIDEOCOMPRESSION_S;
  4132.  
  4133. //===========================================================================
  4134. // MEDIASUBTYPE_Overlay
  4135. #define STATIC_KSDATAFORMAT_SUBTYPE_OVERLAY\
  4136.     0xe436eb7fL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  4137. DEFINE_GUIDSTRUCT("e436eb7f-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_OVERLAY);
  4138. #define KSDATAFORMAT_SUBTYPE_OVERLAY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_OVERLAY)
  4139.  
  4140. #define STATIC_KSPROPSETID_OverlayUpdate\
  4141.     0x490EA5CFL, 0x7681, 0x11D1, 0xA2, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4142. DEFINE_GUIDSTRUCT("490EA5CF-7681-11D1-A21C-00A0C9223196", KSPROPSETID_OverlayUpdate);
  4143. #define KSPROPSETID_OverlayUpdate DEFINE_GUIDNAMED(KSPROPSETID_OverlayUpdate)
  4144.  
  4145. typedef enum {
  4146.     KSPROPERTY_OVERLAYUPDATE_INTERESTS,
  4147.     KSPROPERTY_OVERLAYUPDATE_CLIPLIST = 0x1,
  4148.     KSPROPERTY_OVERLAYUPDATE_PALETTE = 0x2,
  4149.     KSPROPERTY_OVERLAYUPDATE_COLORKEY = 0x4,
  4150.     KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = 0x8,
  4151.     KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = 0x10,
  4152.     KSPROPERTY_OVERLAYUPDATE_COLORREF = 0x10000000
  4153. } KSPROPERTY_OVERLAYUPDATE;
  4154.  
  4155. typedef struct {
  4156.     ULONG   PelsWidth;
  4157.     ULONG   PelsHeight;
  4158.     ULONG   BitsPerPel;
  4159.     WCHAR   DeviceID[1];
  4160. } KSDISPLAYCHANGE, *PKSDISPLAYCHANGE;
  4161.  
  4162. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler)\
  4163.     DEFINE_KSPROPERTY_ITEM(\
  4164.         KSPROPERTY_OVERLAYUPDATE_INTERESTS,\
  4165.         (Handler),\
  4166.         sizeof(KSPROPERTY),\
  4167.         sizeof(ULONG),\
  4168.         NULL, NULL, 0, NULL, NULL, 0)
  4169.  
  4170. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler)\
  4171.     DEFINE_KSPROPERTY_ITEM(\
  4172.         KSPROPERTY_OVERLAYUPDATE_PALETTE,\
  4173.         NULL,\
  4174.         sizeof(KSPROPERTY),\
  4175.         0,\
  4176.         (Handler),\
  4177.         NULL, 0, NULL, NULL, 0)
  4178.  
  4179. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler)\
  4180.     DEFINE_KSPROPERTY_ITEM(\
  4181.         KSPROPERTY_OVERLAYUPDATE_COLORKEY,\
  4182.         NULL,\
  4183.         sizeof(KSPROPERTY),\
  4184.         sizeof(COLORKEY),\
  4185.         (Handler),\
  4186.         NULL, 0, NULL, NULL, 0)
  4187.  
  4188. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler)\
  4189.     DEFINE_KSPROPERTY_ITEM(\
  4190.         KSPROPERTY_OVERLAYUPDATE_CLIPLIST,\
  4191.         NULL,\
  4192.         sizeof(KSPROPERTY),\
  4193.         2 * sizeof(RECT) + sizeof(RGNDATAHEADER),\
  4194.         (Handler),\
  4195.         NULL, 0, NULL, NULL, 0)
  4196.  
  4197. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler)\
  4198.     DEFINE_KSPROPERTY_ITEM(\
  4199.         KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION,\
  4200.         NULL,\
  4201.         sizeof(KSPROPERTY),\
  4202.         2 * sizeof(RECT),\
  4203.         (Handler),\
  4204.         NULL, 0, NULL, NULL, 0)
  4205.  
  4206. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler)\
  4207.     DEFINE_KSPROPERTY_ITEM(\
  4208.         KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE,\
  4209.         NULL,\
  4210.         sizeof(KSPROPERTY),\
  4211.         sizeof(KSDISPLAYCHANGE),\
  4212.         (Handler),\
  4213.         NULL, 0, NULL, NULL, 0)
  4214.  
  4215. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler)\
  4216.     DEFINE_KSPROPERTY_ITEM(\
  4217.         KSPROPERTY_OVERLAYUPDATE_COLORREF,\
  4218.         (Handler),\
  4219.         sizeof(KSPROPERTY),\
  4220.         sizeof(COLORREF),\
  4221.         NULL,\
  4222.         NULL, 0, NULL, NULL, 0)
  4223.  
  4224. //===========================================================================
  4225. #define STATIC_PROPSETID_VIDCAP_VIDEOCONTROL\
  4226.     0x6a2e0670L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  4227. DEFINE_GUIDSTRUCT("6a2e0670-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOCONTROL);
  4228. #define PROPSETID_VIDCAP_VIDEOCONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCONTROL)
  4229.  
  4230. typedef enum {
  4231.     KSPROPERTY_VIDEOCONTROL_CAPS,               // R
  4232.     KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE,  // R O
  4233.     KSPROPERTY_VIDEOCONTROL_FRAME_RATES,        // R O
  4234.     KSPROPERTY_VIDEOCONTROL_MODE,               // RWO
  4235. } KSPROPERTY_VIDCAP_VIDEOCONTROL;
  4236.  
  4237. typedef enum {
  4238.     KS_VideoControlFlag_FlipHorizontal        = 0x0001,
  4239.     KS_VideoControlFlag_FlipVertical          = 0x0002,
  4240.     KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = 0x0010,    // ***WARNING *** Flag msimatch with DSHOW.
  4241.     KS_Obsolete_VideoControlFlag_Trigger               = 0x0020,  // ***WARNING *** Flag msimatch with DSHOW.
  4242.     KS_VideoControlFlag_ExternalTriggerEnable = 0x0004,
  4243.     KS_VideoControlFlag_Trigger                      = 0x0008,
  4244. } KS_VideoControlFlags;
  4245.  
  4246. typedef struct {
  4247.     KSPROPERTY Property;
  4248.     ULONG      StreamIndex;
  4249.     ULONG      VideoControlCaps;                // KS_VideoControlFlags_*
  4250. } KSPROPERTY_VIDEOCONTROL_CAPS_S, *PKSPROPERTY_VIDEOCONTROL_CAPS_S;
  4251.  
  4252. typedef struct {
  4253.     KSPROPERTY Property;
  4254.     ULONG      StreamIndex;
  4255.     LONG       Mode;                            // KS_VideoControlFlags_*
  4256. } KSPROPERTY_VIDEOCONTROL_MODE_S, *PKSPROPERTY_VIDEOCONTROL_MODE_S;
  4257.  
  4258. typedef struct {
  4259.     KSPROPERTY Property;
  4260.     ULONG      StreamIndex;                     // Index of stream
  4261.     ULONG      RangeIndex;                      // Index of range
  4262.     SIZE       Dimensions;                      // Size of image
  4263.     LONGLONG   CurrentActualFrameRate;          // Only correct if pin is open
  4264.     LONGLONG   CurrentMaxAvailableFrameRate;    // Max Rate temporarily limited on USB or 1394?
  4265. } KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S, *PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S;
  4266.  
  4267. // KSPROPERTY_VIDEOCONTROL_FRAME_RATES returns a list of available frame rates in 100 nS units
  4268. typedef struct {
  4269.     KSPROPERTY Property;
  4270.     ULONG      StreamIndex;                     // Index of stream
  4271.     ULONG      RangeIndex;                      // Index of range
  4272.     SIZE       Dimensions;                      // Size of image
  4273. } KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S, *PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S;
  4274.  
  4275. //===========================================================================
  4276. #define STATIC_PROPSETID_VIDCAP_DROPPEDFRAMES\
  4277.     0xC6E13344L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  4278. DEFINE_GUIDSTRUCT("C6E13344-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_DROPPEDFRAMES);
  4279. #define PROPSETID_VIDCAP_DROPPEDFRAMES DEFINE_GUIDNAMED(PROPSETID_VIDCAP_DROPPEDFRAMES)
  4280.  
  4281. typedef enum {
  4282.     KSPROPERTY_DROPPEDFRAMES_CURRENT            // R
  4283. } KSPROPERTY_VIDCAP_DROPPEDFRAMES;
  4284.  
  4285. typedef struct {
  4286.     KSPROPERTY Property;
  4287.     LONGLONG   PictureNumber;                   // Current Picture Number
  4288.     LONGLONG   DropCount;                       // Count of frames dropped
  4289.     ULONG      AverageFrameSize;                // Average size of frames captured
  4290. } KSPROPERTY_DROPPEDFRAMES_CURRENT_S, *PKSPROPERTY_DROPPEDFRAMES_CURRENT_S;
  4291.  
  4292. //===========================================================================
  4293. // VPE
  4294.  
  4295. #define STATIC_KSPROPSETID_VPConfig\
  4296.     0xbc29a660L, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b
  4297. DEFINE_GUIDSTRUCT("bc29a660-30e3-11d0-9e69-00c04fd7c15b", KSPROPSETID_VPConfig);
  4298. #define KSPROPSETID_VPConfig DEFINE_GUIDNAMED(KSPROPSETID_VPConfig)
  4299.  
  4300. #define STATIC_KSPROPSETID_VPVBIConfig\
  4301.     0xec529b00L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  4302. DEFINE_GUIDSTRUCT("ec529b00-1a1f-11d1-bad9-00609744111a", KSPROPSETID_VPVBIConfig);
  4303. #define KSPROPSETID_VPVBIConfig DEFINE_GUIDNAMED(KSPROPSETID_VPVBIConfig)
  4304.  
  4305. // Both of the above property sets use the same list of properties below
  4306.  
  4307. typedef enum {
  4308.     KSPROPERTY_VPCONFIG_NUMCONNECTINFO,
  4309.     KSPROPERTY_VPCONFIG_GETCONNECTINFO,
  4310.     KSPROPERTY_VPCONFIG_SETCONNECTINFO,
  4311.     KSPROPERTY_VPCONFIG_VPDATAINFO,
  4312.     KSPROPERTY_VPCONFIG_MAXPIXELRATE,
  4313.     KSPROPERTY_VPCONFIG_INFORMVPINPUT,
  4314.     KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT,
  4315.     KSPROPERTY_VPCONFIG_GETVIDEOFORMAT,
  4316.     KSPROPERTY_VPCONFIG_SETVIDEOFORMAT,
  4317.     KSPROPERTY_VPCONFIG_INVERTPOLARITY,
  4318.     KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY,   // E_NOTIMPL for VBI
  4319.     KSPROPERTY_VPCONFIG_SCALEFACTOR,            // E_NOTIMPL for VBI
  4320.     KSPROPERTY_VPCONFIG_DDRAWHANDLE,
  4321.     KSPROPERTY_VPCONFIG_VIDEOPORTID,
  4322.     KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE,
  4323.     KSPROPERTY_VPCONFIG_SURFACEPARAMS
  4324. } KSPROPERTY_VPCONFIG;
  4325.  
  4326. //=========================
  4327. // IBasicAudio
  4328. //
  4329. #define STATIC_CLSID_KsIBasicAudioInterfaceHandler\
  4330.     0xb9f8ac3e, 0x0f71, 0x11d2, 0xb7, 0x2c, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d
  4331. DEFINE_GUIDSTRUCT("b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d", CLSID_KsIBasicAudioInterfaceHandler);
  4332. #define CLSID_KsIBasicAudioInterfaceHandler DEFINE_GUIDNAMED(CLSID_KsIBasicAudioInterfaceHandler)
  4333.  
  4334.  
  4335. #if defined(__IVPType__)
  4336.  
  4337. typedef struct {
  4338.     AMVPSIZE    Size;
  4339.     DWORD       MaxPixelsPerSecond;
  4340.     DWORD       Reserved;
  4341. } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
  4342.  
  4343. typedef struct {
  4344.     KSPROPERTY      Property;
  4345.     AMVPSIZE        Size;
  4346. } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
  4347.  
  4348. typedef struct {
  4349.     DWORD   dwPitch;
  4350.     DWORD   dwXOrigin;
  4351.     DWORD   dwYOrigin;
  4352. } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
  4353.  
  4354. #else  // !defined(__IVPType__)
  4355.  
  4356. #if !defined(__DDRAW_INCLUDED__)
  4357.  
  4358. //==========================================================================
  4359. // The following definitions must be in sync with DDraw.h in DirectX SDK
  4360. //==========================================================================
  4361.  
  4362. /*
  4363.  * The FourCC code is valid.
  4364.  */
  4365. #define DDPF_FOURCC                             0x00000004l
  4366.  
  4367.  
  4368. typedef struct _DDPIXELFORMAT
  4369. {
  4370.     DWORD       dwSize;                 // size of structure
  4371.     DWORD       dwFlags;                // pixel format flags
  4372.     DWORD       dwFourCC;               // (FOURCC code)
  4373.     union
  4374.     {
  4375.     DWORD   dwRGBBitCount;          // how many bits per pixel (BD_1,2,4,8,16,24,32)
  4376.     DWORD   dwYUVBitCount;          // how many bits per pixel (BD_4,8,16,24,32)
  4377.     DWORD   dwZBufferBitDepth;      // how many bits for z buffers (BD_8,16,24,32)
  4378.     DWORD   dwAlphaBitDepth;        // how many bits for alpha channels (BD_1,2,4,8)
  4379.     };
  4380.     union
  4381.     {
  4382.     DWORD   dwRBitMask;             // mask for red bit
  4383.     DWORD   dwYBitMask;             // mask for Y bits
  4384.     };
  4385.     union
  4386.     {
  4387.     DWORD   dwGBitMask;             // mask for green bits
  4388.     DWORD   dwUBitMask;             // mask for U bits
  4389.     };
  4390.     union
  4391.     {
  4392.     DWORD   dwBBitMask;             // mask for blue bits
  4393.     DWORD   dwVBitMask;             // mask for V bits
  4394.     };
  4395.     union
  4396.     {
  4397.     DWORD   dwRGBAlphaBitMask;      // mask for alpha channel
  4398.     DWORD   dwYUVAlphaBitMask;      // mask for alpha channel
  4399.     DWORD   dwRGBZBitMask;          // mask for Z channel
  4400.     DWORD   dwYUVZBitMask;          // mask for Z channel
  4401.     };
  4402. } DDPIXELFORMAT, * LPDDPIXELFORMAT;
  4403.  
  4404. #endif // !defined(__DDRAW_INCLUDED__)
  4405.  
  4406. //==========================================================================
  4407. // End of DDraw.h header info
  4408. //==========================================================================
  4409.  
  4410. //==========================================================================
  4411. // The following definitions must be in sync with DVP.h in DirectX SDK
  4412. //==========================================================================
  4413.  
  4414. #if !defined(__DVP_INCLUDED__)
  4415.  
  4416. typedef struct _DDVIDEOPORTCONNECT {
  4417.     DWORD dwSize;           // size of the DDVIDEOPORTCONNECT structure
  4418.     DWORD dwPortWidth;      // Width of the video port
  4419.     GUID  guidTypeID;       // Description of video port connection
  4420.     DWORD dwFlags;          // Connection flags
  4421.     DWORD dwReserved1;      // Reserved, set to zero.
  4422. } DDVIDEOPORTCONNECT, * LPDDVIDEOPORTCONNECT;
  4423.  
  4424. #define DDVPTYPE_E_HREFH_VREFH  \
  4425.     0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
  4426.  
  4427. #define DDVPTYPE_E_HREFL_VREFL  \
  4428.     0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
  4429.  
  4430. #endif // !defined(__DVP_INCLUDED__)
  4431.  
  4432. //==========================================================================
  4433. // End of DVP.h header info
  4434. //==========================================================================
  4435.  
  4436.  
  4437. //==========================================================================
  4438. // The following definitions must be in sync with VPType.h in AM 2.0 SDK
  4439. //==========================================================================
  4440.  
  4441. // pixel aspect ratios corresponding to a 720x480 NTSC image or a 720x576 image
  4442. typedef enum // AMPixAspectRatio
  4443. {
  4444.     KS_PixAspectRatio_NTSC4x3,
  4445.     KS_PixAspectRatio_NTSC16x9,
  4446.     KS_PixAspectRatio_PAL4x3,
  4447.     KS_PixAspectRatio_PAL16x9,
  4448. } KS_AMPixAspectRatio ;
  4449.  
  4450. typedef enum // AMVP_SELECTFORMATBY
  4451. {
  4452.     KS_AMVP_DO_NOT_CARE,
  4453.     KS_AMVP_BEST_BANDWIDTH,
  4454.     KS_AMVP_INPUT_SAME_AS_OUTPUT
  4455. } KS_AMVP_SELECTFORMATBY;
  4456.  
  4457. typedef enum // AMVP_MODE
  4458. {
  4459.     KS_AMVP_MODE_WEAVE,
  4460.     KS_AMVP_MODE_BOBINTERLEAVED,
  4461.     KS_AMVP_MODE_BOBNONINTERLEAVED,
  4462.     KS_AMVP_MODE_SKIPEVEN,
  4463.     KS_AMVP_MODE_SKIPODD
  4464. } KS_AMVP_MODE ;
  4465.  
  4466. typedef struct tagKS_AMVPDIMINFO      // AMVPDIMINFO
  4467. {
  4468.     DWORD dwFieldWidth ;            // [out] field width
  4469.     DWORD dwFieldHeight ;           // [out] field height
  4470.     DWORD dwVBIWidth ;              // [out] VBI data width
  4471.     DWORD dwVBIHeight ;             // [out] VBI data height
  4472.     RECT  rcValidRegion ;           // [out] valid rect for data cropping
  4473. } KS_AMVPDIMINFO, *PKS_AMVPDIMINFO ;
  4474.  
  4475. typedef struct tagKS_AMVPDATAINFO   // AMVPDATAINFO
  4476. {
  4477.     DWORD           dwSize;                 // Size of the struct
  4478.     DWORD           dwMicrosecondsPerField; // Time taken by each field
  4479.     KS_AMVPDIMINFO  amvpDimInfo;            // Dimensional Information
  4480.     DWORD           dwPictAspectRatioX;     // Pict aspect ratio in X dimn
  4481.     DWORD           dwPictAspectRatioY;     // Pict aspect ratio in Y dimn
  4482.     BOOL            bEnableDoubleClock;     // Videoport should enable double clocking
  4483.     BOOL            bEnableVACT;            // Videoport should use an external VACT signal
  4484.     BOOL            bDataIsInterlaced;      // Indicates that the signal is interlaced
  4485.     LONG            lHalfLinesOdd;          // number of halflines in the odd field
  4486.     BOOL            bFieldPolarityInverted; // Device inverts the polarity by default
  4487.     DWORD           dwNumLinesInVREF;       // Number of lines of data in VREF
  4488.     LONG            lHalfLinesEven;         // number of halflines in the even field
  4489.     DWORD           dwReserved1;            // Reserved for future use
  4490. } KS_AMVPDATAINFO, *PKS_AMVPDATAINFO;
  4491.  
  4492. typedef struct tagKS_AMVPSIZE   // AMVPSIZE
  4493. {
  4494.     DWORD dwWidth ;                  // [in] width in pixels
  4495.     DWORD dwHeight ;                 // [in] height in pixels
  4496. } KS_AMVPSIZE, *PKS_AMVPSIZE ;
  4497.  
  4498. //==========================================================================
  4499. // End of VPType.h header info
  4500. //==========================================================================
  4501.  
  4502. typedef struct {
  4503.     KS_AMVPSIZE     Size;
  4504.     DWORD           MaxPixelsPerSecond;
  4505.     DWORD           Reserved;
  4506. } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
  4507.  
  4508. typedef struct {
  4509.     KSPROPERTY      Property;
  4510.     KS_AMVPSIZE     Size;
  4511. } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
  4512.  
  4513. typedef struct {
  4514.     DWORD   dwPitch;
  4515.     DWORD   dwXOrigin;
  4516.     DWORD   dwYOrigin;
  4517. } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
  4518.  
  4519. #endif // !defined(__IVPType__)
  4520.  
  4521. //
  4522. //  IVPNotify event notification
  4523. //
  4524. #define STATIC_KSEVENTSETID_VPNotify\
  4525.     0x20c5598eL, 0xd3c8, 0x11d0, 0x8d, 0xfc, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b
  4526. DEFINE_GUIDSTRUCT("20c5598e-d3c8-11d0-8dfc-00c04fd7c08b", KSEVENTSETID_VPNotify);
  4527. #define KSEVENTSETID_VPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VPNotify)
  4528.  
  4529. typedef enum {
  4530.     KSEVENT_VPNOTIFY_FORMATCHANGE,
  4531. } KSEVENT_VPNOTIFY;
  4532.  
  4533. //
  4534. //  VIDCAPTOSTI event notification
  4535. //
  4536. #define STATIC_KSEVENTSETID_VIDCAPTOSTI\
  4537.     0xdb47de20, 0xf628, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5
  4538. DEFINE_GUIDSTRUCT("DB47DE20-F628-11d1-BA41-00A0C90D2B05", KSEVENTSETID_VIDCAPTOSTI);
  4539. #define KSEVENTSETID_VIDCAPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAPTOSTI)
  4540.  
  4541. typedef enum {
  4542.     KSEVENT_VIDCAPTOSTI_EXT_TRIGGER,
  4543. } KSEVENT_VIDCAPTOSTI;
  4544.  
  4545.  
  4546. //
  4547. //  IVPVBINotify event notification
  4548. //
  4549. #define STATIC_KSEVENTSETID_VPVBINotify\
  4550.     0xec529b01L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  4551. DEFINE_GUIDSTRUCT("ec529b01-1a1f-11d1-bad9-00609744111a", KSEVENTSETID_VPVBINotify);
  4552. #define KSEVENTSETID_VPVBINotify DEFINE_GUIDNAMED(KSEVENTSETID_VPVBINotify)
  4553.  
  4554. typedef enum {
  4555.     KSEVENT_VPVBINOTIFY_FORMATCHANGE,
  4556. } KSEVENT_VPVBINOTIFY;
  4557.  
  4558.  
  4559. //
  4560. // closed caption information
  4561. //
  4562.  
  4563. #define STATIC_KSDATAFORMAT_TYPE_AUXLine21Data \
  4564. 0x670aea80L, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  4565. DEFINE_GUIDSTRUCT("670aea80-3a82-11d0-b79b-00aa003767a7", KSDATAFORMAT_TYPE_AUXLine21Data);
  4566. #define KSDATAFORMAT_TYPE_AUXLine21Data DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUXLine21Data)
  4567.  
  4568. #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_BytePair \
  4569. 0x6e8d4a22L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  4570. DEFINE_GUIDSTRUCT("6e8d4a22-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_BytePair);
  4571. #define KSDATAFORMAT_SUBTYPE_Line21_BytePair DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_BytePair)
  4572.  
  4573. #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_GOPPacket \
  4574. 0x6e8d4a23L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  4575. DEFINE_GUIDSTRUCT("6e8d4a23-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_GOPPacket);
  4576. #define KSDATAFORMAT_SUBTYPE_Line21_GOPPacket DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_GOPPacket)
  4577.  
  4578. typedef struct _KSGOP_USERDATA {
  4579.     ULONG sc;
  4580.     ULONG reserved1;
  4581.     BYTE cFields;
  4582.     CHAR l21Data[3];
  4583. } KSGOP_USERDATA, *PKSGOP_USERDATA;
  4584.  
  4585. //
  4586. // DVD encrypted PACK format type definition
  4587. //
  4588.  
  4589. #define STATIC_KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK\
  4590.     0xed0b916a, 0x044d, 0x11d1, 0xaa, 0x78, 0x00, 0xc0, 0x4f, 0xc3, 0x1d, 0x60
  4591. DEFINE_GUIDSTRUCT("ed0b916a-044d-11d1-aa78-00c04fc31d60", KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK);
  4592. #define KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK)
  4593.  
  4594. #define KS_AM_UseNewCSSKey    0x1
  4595.  
  4596.  
  4597. // -----------------------------------------------------------------------
  4598. // KS_AM_KSPROPSETID_TSRateChange property set definitions for time stamp
  4599. // rate changes.
  4600. // -----------------------------------------------------------------------
  4601.  
  4602.  
  4603. #define STATIC_KSPROPSETID_TSRateChange\
  4604.     0xa503c5c0, 0x1d1d, 0x11d1, 0xad, 0x80, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0
  4605.  
  4606. DEFINE_GUIDSTRUCT("A503C5C0-1D1D-11D1-AD80-444553540000", KSPROPSETID_TSRateChange);
  4607. #define KSPROPSETID_TSRateChange DEFINE_GUIDNAMED(KSPROPSETID_TSRateChange)
  4608. typedef enum {
  4609.     KS_AM_RATE_SimpleRateChange=1,  // rw, use KS_AM_SimpleRateChange
  4610.     KS_AM_RATE_ExactRateChange=2,   // rw, use KS_AM_ExactRateChange
  4611.     KS_AM_RATE_MaxFullDataRate=3,   // r, use KS_AM_MaxFullDataRate
  4612.     KS_AM_RATE_Step=4               // w, use KS_AM_Step
  4613. } KS_AM_PROPERTY_TS_RATE_CHANGE;
  4614.  
  4615. typedef struct {
  4616.     // this is the simplest mechanism to set a time stamp rate change on
  4617.     // a filter (simplest for the person setting the rate change, harder
  4618.     // for the filter doing the rate change).
  4619.     REFERENCE_TIME  StartTime;  //stream time at which to start this rate
  4620.     LONG        Rate;       //new rate * 10000 (decimal)
  4621. } KS_AM_SimpleRateChange, *PKS_AM_SimpleRateChange;
  4622.  
  4623. typedef struct {
  4624.     REFERENCE_TIME  OutputZeroTime; //input TS that maps to zero output TS
  4625.     LONG        Rate;       //new rate * 10000 (decimal)
  4626. } KS_AM_ExactRateChange, *PKS_AM_ExactRateChange;
  4627.  
  4628. typedef LONG KS_AM_MaxFullDataRate; //rate * 10000 (decimal)
  4629.  
  4630. typedef DWORD KS_AM_Step; // number of frame to step
  4631.  
  4632.  
  4633.  
  4634. /////////////////////////////////////////////////////////////////////////////
  4635. //
  4636. //  Windows XP vs. DirectX 8.0 header merge
  4637. //
  4638. //  The following is the original contents of this header from
  4639. //  the DirectX 8.0 SDK.
  4640. //
  4641. /////////////////////////////////////////////////////////////////////////////
  4642.  
  4643. #else     // DirectX 8.0 content
  4644.  
  4645.  
  4646.     typedef struct {
  4647.         KSPROPERTY      Property;
  4648.         KSMULTIPLE_ITEM MultipleItem;
  4649.     } KSMULTIPLE_DATA_PROP, *PKSMULTIPLE_DATA_PROP;
  4650.  
  4651.     #define STATIC_KSMEDIUMSETID_MidiBus \
  4652.         0x05908040L, 0x3246, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  4653.     DEFINE_GUIDSTRUCT("05908040-3246-11D0-A5D6-28DB04C10000", KSMEDIUMSETID_MidiBus);
  4654.     #define KSMEDIUMSETID_MidiBus DEFINE_GUIDNAMED(KSMEDIUMSETID_MidiBus)
  4655.  
  4656.     #define STATIC_KSMEDIUMSETID_VPBus \
  4657.         0xA18C15ECL, 0xCE43, 0x11D0, 0xAB, 0xE7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4658.     DEFINE_GUIDSTRUCT("A18C15EC-CE43-11D0-ABE7-00A0C9223196", KSMEDIUMSETID_VPBus);
  4659.     #define KSMEDIUMSETID_VPBus DEFINE_GUIDNAMED(KSMEDIUMSETID_VPBus)
  4660.  
  4661.     #define STATIC_KSINTERFACESETID_Media \
  4662.         0x3A13EB40L, 0x30A7, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  4663.     DEFINE_GUIDSTRUCT("3A13EB40-30A7-11D0-A5D6-28DB04C10000", KSINTERFACESETID_Media);
  4664.     #define KSINTERFACESETID_Media DEFINE_GUIDNAMED(KSINTERFACESETID_Media)
  4665.  
  4666.     typedef enum {
  4667.         KSINTERFACE_MEDIA_MUSIC,
  4668.         KSINTERFACE_MEDIA_WAVE_BUFFERED,
  4669.         KSINTERFACE_MEDIA_WAVE_QUEUED
  4670.     } KSINTERFACE_MEDIA;
  4671.  
  4672.  
  4673.     // USB Terminals
  4674.     #define INIT_USB_TERMINAL(guid, id)\
  4675.     {\
  4676.         (guid)->Data1 = 0xDFF219E0 + (USHORT)(id);\
  4677.         (guid)->Data2 = 0xF70F;\
  4678.         (guid)->Data3 = 0x11D0;\
  4679.         (guid)->Data4[0] = 0xb9;\
  4680.         (guid)->Data4[1] = 0x17;\
  4681.         (guid)->Data4[2] = 0x00;\
  4682.         (guid)->Data4[3] = 0xa0;\
  4683.         (guid)->Data4[4] = 0xc9;\
  4684.         (guid)->Data4[5] = 0x22;\
  4685.         (guid)->Data4[6] = 0x31;\
  4686.         (guid)->Data4[7] = 0x96;\
  4687.     }
  4688.     #define EXTRACT_USB_TERMINAL(guid)\
  4689.         (USHORT)((guid)->Data1 - 0xDFF219E0)
  4690.     #define DEFINE_USB_TERMINAL_GUID(id)\
  4691.         0xDFF219E0+(USHORT)(id), 0xF70F, 0x11D0, 0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4692.  
  4693.     #define STATIC_KSNODETYPE_MICROPHONE\
  4694.         DEFINE_USB_TERMINAL_GUID(0x0201)
  4695.     DEFINE_GUIDSTRUCT("DFF21BE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE);
  4696.     #define KSNODETYPE_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE)
  4697.  
  4698.     #define STATIC_KSNODETYPE_DESKTOP_MICROPHONE\
  4699.         DEFINE_USB_TERMINAL_GUID(0x0202)
  4700.     DEFINE_GUIDSTRUCT("DFF21BE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_MICROPHONE);
  4701.     #define KSNODETYPE_DESKTOP_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_MICROPHONE)
  4702.  
  4703.     #define STATIC_KSNODETYPE_PERSONAL_MICROPHONE\
  4704.         DEFINE_USB_TERMINAL_GUID(0x0203)
  4705.     DEFINE_GUIDSTRUCT("DFF21BE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PERSONAL_MICROPHONE);
  4706.     #define KSNODETYPE_PERSONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_PERSONAL_MICROPHONE)
  4707.  
  4708.     #define STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE\
  4709.         DEFINE_USB_TERMINAL_GUID(0x0204)
  4710.     DEFINE_GUIDSTRUCT("DFF21BE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE);
  4711.     #define KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE)
  4712.  
  4713.     #define STATIC_KSNODETYPE_MICROPHONE_ARRAY\
  4714.         DEFINE_USB_TERMINAL_GUID(0x0205)
  4715.     DEFINE_GUIDSTRUCT("DFF21BE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE_ARRAY);
  4716.     #define KSNODETYPE_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE_ARRAY)
  4717.  
  4718.     #define STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY\
  4719.         DEFINE_USB_TERMINAL_GUID(0x0206)
  4720.     DEFINE_GUIDSTRUCT("DFF21BE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PROCESSING_MICROPHONE_ARRAY);
  4721.     #define KSNODETYPE_PROCESSING_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_PROCESSING_MICROPHONE_ARRAY)
  4722.  
  4723.     #define STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR \
  4724.         0x830a44f2, 0xa32d, 0x476b,  0xbe, 0x97, 0x42, 0x84, 0x56, 0x73, 0xb3, 0x5a
  4725.     DEFINE_GUIDSTRUCT("830a44f2-a32d-476b-be97-42845673b35a", KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR);
  4726.     #define KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR)
  4727.  
  4728.     #define STATIC_KSNODETYPE_SPEAKER\
  4729.         DEFINE_USB_TERMINAL_GUID(0x0301)
  4730.     DEFINE_GUIDSTRUCT("DFF21CE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKER);
  4731.     #define KSNODETYPE_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_SPEAKER)
  4732.  
  4733.     #define STATIC_KSNODETYPE_HEADPHONES\
  4734.         DEFINE_USB_TERMINAL_GUID(0x0302)
  4735.     DEFINE_GUIDSTRUCT("DFF21CE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADPHONES);
  4736.     #define KSNODETYPE_HEADPHONES DEFINE_GUIDNAMED(KSNODETYPE_HEADPHONES)
  4737.  
  4738.     #define STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO\
  4739.         DEFINE_USB_TERMINAL_GUID(0x0303)
  4740.     DEFINE_GUIDSTRUCT("DFF21CE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO);
  4741.     #define KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO)
  4742.  
  4743.     #define STATIC_KSNODETYPE_DESKTOP_SPEAKER\
  4744.         DEFINE_USB_TERMINAL_GUID(0x0304)
  4745.     DEFINE_GUIDSTRUCT("DFF21CE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_SPEAKER);
  4746.     #define KSNODETYPE_DESKTOP_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_SPEAKER)
  4747.  
  4748.     #define STATIC_KSNODETYPE_ROOM_SPEAKER\
  4749.         DEFINE_USB_TERMINAL_GUID(0x0305)
  4750.     DEFINE_GUIDSTRUCT("DFF21CE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ROOM_SPEAKER);
  4751.     #define KSNODETYPE_ROOM_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_ROOM_SPEAKER)
  4752.  
  4753.     #define STATIC_KSNODETYPE_COMMUNICATION_SPEAKER\
  4754.         DEFINE_USB_TERMINAL_GUID(0x0306)
  4755.     DEFINE_GUIDSTRUCT("DFF21CE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_COMMUNICATION_SPEAKER);
  4756.     #define KSNODETYPE_COMMUNICATION_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_COMMUNICATION_SPEAKER)
  4757.  
  4758.     #define STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER\
  4759.         DEFINE_USB_TERMINAL_GUID(0x0307)
  4760.     DEFINE_GUIDSTRUCT("DFF21CE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER);
  4761.     #define KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER)
  4762.  
  4763.     #define STATIC_KSNODETYPE_HANDSET\
  4764.         DEFINE_USB_TERMINAL_GUID(0x0401)
  4765.     DEFINE_GUIDSTRUCT("DFF21DE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HANDSET);
  4766.     #define KSNODETYPE_HANDSET DEFINE_GUIDNAMED(KSNODETYPE_HANDSET)
  4767.  
  4768.     #define STATIC_KSNODETYPE_HEADSET\
  4769.         DEFINE_USB_TERMINAL_GUID(0x0402)
  4770.     DEFINE_GUIDSTRUCT("DFF21DE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADSET);
  4771.     #define KSNODETYPE_HEADSET DEFINE_GUIDNAMED(KSNODETYPE_HEADSET)
  4772.  
  4773.     #define STATIC_KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION\
  4774.         DEFINE_USB_TERMINAL_GUID(0x0403)
  4775.     DEFINE_GUIDSTRUCT("DFF21DE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION);
  4776.     #define KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION DEFINE_GUIDNAMED(KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION)
  4777.  
  4778.     #define STATIC_KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE\
  4779.         DEFINE_USB_TERMINAL_GUID(0x0404)
  4780.     DEFINE_GUIDSTRUCT("DFF21DE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE);
  4781.     #define KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE)
  4782.  
  4783.     #define STATIC_KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE\
  4784.         DEFINE_USB_TERMINAL_GUID(0x0405)
  4785.     DEFINE_GUIDSTRUCT("DFF21DE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE);
  4786.     #define KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE)
  4787.  
  4788.     #define STATIC_KSNODETYPE_PHONE_LINE\
  4789.         DEFINE_USB_TERMINAL_GUID(0x0501)
  4790.     DEFINE_GUIDSTRUCT("DFF21EE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONE_LINE);
  4791.     #define KSNODETYPE_PHONE_LINE DEFINE_GUIDNAMED(KSNODETYPE_PHONE_LINE)
  4792.  
  4793.     #define STATIC_KSNODETYPE_TELEPHONE\
  4794.         DEFINE_USB_TERMINAL_GUID(0x0502)
  4795.     DEFINE_GUIDSTRUCT("DFF21EE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TELEPHONE);
  4796.     #define KSNODETYPE_TELEPHONE DEFINE_GUIDNAMED(KSNODETYPE_TELEPHONE)
  4797.  
  4798.     #define STATIC_KSNODETYPE_DOWN_LINE_PHONE\
  4799.         DEFINE_USB_TERMINAL_GUID(0x0503)
  4800.     DEFINE_GUIDSTRUCT("DFF21EE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DOWN_LINE_PHONE);
  4801.     #define KSNODETYPE_DOWN_LINE_PHONE DEFINE_GUIDNAMED(KSNODETYPE_DOWN_LINE_PHONE)
  4802.  
  4803.     #define STATIC_KSNODETYPE_ANALOG_CONNECTOR\
  4804.         DEFINE_USB_TERMINAL_GUID(0x601)
  4805.     DEFINE_GUIDSTRUCT("DFF21FE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_CONNECTOR);
  4806.     #define KSNODETYPE_ANALOG_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_CONNECTOR)
  4807.  
  4808.     #define STATIC_KSNODETYPE_DIGITAL_AUDIO_INTERFACE\
  4809.         DEFINE_USB_TERMINAL_GUID(0x0602)
  4810.     DEFINE_GUIDSTRUCT("DFF21FE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DIGITAL_AUDIO_INTERFACE);
  4811.     #define KSNODETYPE_DIGITAL_AUDIO_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_DIGITAL_AUDIO_INTERFACE)
  4812.  
  4813.     #define STATIC_KSNODETYPE_LINE_CONNECTOR\
  4814.         DEFINE_USB_TERMINAL_GUID(0x0603)
  4815.     DEFINE_GUIDSTRUCT("DFF21FE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LINE_CONNECTOR);
  4816.     #define KSNODETYPE_LINE_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LINE_CONNECTOR)
  4817.  
  4818.     #define STATIC_KSNODETYPE_LEGACY_AUDIO_CONNECTOR\
  4819.         DEFINE_USB_TERMINAL_GUID(0x0604)
  4820.     DEFINE_GUIDSTRUCT("DFF21FE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEGACY_AUDIO_CONNECTOR);
  4821.     #define KSNODETYPE_LEGACY_AUDIO_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LEGACY_AUDIO_CONNECTOR)
  4822.  
  4823.     #define STATIC_KSNODETYPE_SPDIF_INTERFACE\
  4824.         DEFINE_USB_TERMINAL_GUID(0x0605)
  4825.     DEFINE_GUIDSTRUCT("DFF21FE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPDIF_INTERFACE);
  4826.     #define KSNODETYPE_SPDIF_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_SPDIF_INTERFACE)
  4827.  
  4828.     #define STATIC_KSNODETYPE_1394_DA_STREAM\
  4829.         DEFINE_USB_TERMINAL_GUID(0x0606)
  4830.     DEFINE_GUIDSTRUCT("DFF21FE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DA_STREAM);
  4831.     #define KSNODETYPE_1394_DA_STREAM DEFINE_GUIDNAMED(KSNODETYPE_1394_DA_STREAM)
  4832.  
  4833.     #define STATIC_KSNODETYPE_1394_DV_STREAM_SOUNDTRACK\
  4834.         DEFINE_USB_TERMINAL_GUID(0x0607)
  4835.     DEFINE_GUIDSTRUCT("DFF21FE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DV_STREAM_SOUNDTRACK);
  4836.     #define KSNODETYPE_1394_DV_STREAM_SOUNDTRACK DEFINE_GUIDNAMED(KSNODETYPE_1394_DV_STREAM_SOUNDTRACK)
  4837.  
  4838.     #define STATIC_KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE\
  4839.         DEFINE_USB_TERMINAL_GUID(0x0701)
  4840.     DEFINE_GUIDSTRUCT("DFF220E1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE);
  4841.     #define KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE DEFINE_GUIDNAMED(KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE)
  4842.  
  4843.     #define STATIC_KSNODETYPE_EQUALIZATION_NOISE\
  4844.         DEFINE_USB_TERMINAL_GUID(0x0702)
  4845.     DEFINE_GUIDSTRUCT("DFF220E2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_EQUALIZATION_NOISE);
  4846.     #define KSNODETYPE_EQUALIZATION_NOISE DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZATION_NOISE)
  4847.  
  4848.     #define STATIC_KSNODETYPE_CD_PLAYER\
  4849.         DEFINE_USB_TERMINAL_GUID(0x0703)
  4850.     DEFINE_GUIDSTRUCT("DFF220E3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CD_PLAYER);
  4851.     #define KSNODETYPE_CD_PLAYER DEFINE_GUIDNAMED(KSNODETYPE_CD_PLAYER)
  4852.  
  4853.     #define STATIC_KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE\
  4854.         DEFINE_USB_TERMINAL_GUID(0x0704)
  4855.     DEFINE_GUIDSTRUCT("DFF220E4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE);
  4856.     #define KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE DEFINE_GUIDNAMED(KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE)
  4857.  
  4858.     #define STATIC_KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE\
  4859.         DEFINE_USB_TERMINAL_GUID(0x0705)
  4860.     DEFINE_GUIDSTRUCT("DFF220E5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE);
  4861.     #define KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE DEFINE_GUIDNAMED(KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE)
  4862.  
  4863.     #define STATIC_KSNODETYPE_MINIDISK\
  4864.         DEFINE_USB_TERMINAL_GUID(0x0706)
  4865.     DEFINE_GUIDSTRUCT("DFF220E6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MINIDISK);
  4866.     #define KSNODETYPE_MINIDISK DEFINE_GUIDNAMED(KSNODETYPE_MINIDISK)
  4867.  
  4868.     #define STATIC_KSNODETYPE_ANALOG_TAPE\
  4869.         DEFINE_USB_TERMINAL_GUID(0x0707)
  4870.     DEFINE_GUIDSTRUCT("DFF220E7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_TAPE);
  4871.     #define KSNODETYPE_ANALOG_TAPE DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_TAPE)
  4872.  
  4873.     #define STATIC_KSNODETYPE_PHONOGRAPH\
  4874.         DEFINE_USB_TERMINAL_GUID(0x0708)
  4875.     DEFINE_GUIDSTRUCT("DFF220E8-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONOGRAPH);
  4876.     #define KSNODETYPE_PHONOGRAPH DEFINE_GUIDNAMED(KSNODETYPE_PHONOGRAPH)
  4877.  
  4878.     #define STATIC_KSNODETYPE_VCR_AUDIO\
  4879.         DEFINE_USB_TERMINAL_GUID(0x0708)
  4880.     DEFINE_GUIDSTRUCT("DFF220E9-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VCR_AUDIO);
  4881.     #define KSNODETYPE_VCR_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VCR_AUDIO)
  4882.  
  4883.     #define STATIC_KSNODETYPE_VIDEO_DISC_AUDIO\
  4884.         DEFINE_USB_TERMINAL_GUID(0x070A)
  4885.     DEFINE_GUIDSTRUCT("DFF220EA-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VIDEO_DISC_AUDIO);
  4886.     #define KSNODETYPE_VIDEO_DISC_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_DISC_AUDIO)
  4887.  
  4888.     #define STATIC_KSNODETYPE_DVD_AUDIO\
  4889.         DEFINE_USB_TERMINAL_GUID(0x070B)
  4890.     DEFINE_GUIDSTRUCT("DFF220EB-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DVD_AUDIO);
  4891.     #define KSNODETYPE_DVD_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DVD_AUDIO)
  4892.  
  4893.     #define STATIC_KSNODETYPE_TV_TUNER_AUDIO\
  4894.         DEFINE_USB_TERMINAL_GUID(0x070C)
  4895.     DEFINE_GUIDSTRUCT("DFF220EC-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TV_TUNER_AUDIO);
  4896.     #define KSNODETYPE_TV_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_TV_TUNER_AUDIO)
  4897.  
  4898.     #define STATIC_KSNODETYPE_SATELLITE_RECEIVER_AUDIO\
  4899.         DEFINE_USB_TERMINAL_GUID(0x070D)
  4900.     DEFINE_GUIDSTRUCT("DFF220ED-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SATELLITE_RECEIVER_AUDIO);
  4901.     #define KSNODETYPE_SATELLITE_RECEIVER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_SATELLITE_RECEIVER_AUDIO)
  4902.  
  4903.     #define STATIC_KSNODETYPE_CABLE_TUNER_AUDIO\
  4904.         DEFINE_USB_TERMINAL_GUID(0x070E)
  4905.     DEFINE_GUIDSTRUCT("DFF220EE-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CABLE_TUNER_AUDIO);
  4906.     #define KSNODETYPE_CABLE_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_CABLE_TUNER_AUDIO)
  4907.  
  4908.     #define STATIC_KSNODETYPE_DSS_AUDIO\
  4909.         DEFINE_USB_TERMINAL_GUID(0x070F)
  4910.     DEFINE_GUIDSTRUCT("DFF220EF-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DSS_AUDIO);
  4911.     #define KSNODETYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DSS_AUDIO)
  4912.  
  4913.     #define STATIC_KSNODETYPE_RADIO_RECEIVER\
  4914.         DEFINE_USB_TERMINAL_GUID(0x0710)
  4915.     DEFINE_GUIDSTRUCT("DFF220F0-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_RECEIVER);
  4916.     #define KSNODETYPE_RADIO_RECEIVER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_RECEIVER)
  4917.  
  4918.     #define STATIC_KSNODETYPE_RADIO_TRANSMITTER\
  4919.         DEFINE_USB_TERMINAL_GUID(0x0711)
  4920.     DEFINE_GUIDSTRUCT("DFF220F1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_TRANSMITTER);
  4921.     #define KSNODETYPE_RADIO_TRANSMITTER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_TRANSMITTER)
  4922.  
  4923.     #define STATIC_KSNODETYPE_MULTITRACK_RECORDER\
  4924.         DEFINE_USB_TERMINAL_GUID(0x0712)
  4925.     DEFINE_GUIDSTRUCT("DFF220F2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MULTITRACK_RECORDER);
  4926.     #define KSNODETYPE_MULTITRACK_RECORDER DEFINE_GUIDNAMED(KSNODETYPE_MULTITRACK_RECORDER)
  4927.  
  4928.     #define STATIC_KSNODETYPE_SYNTHESIZER\
  4929.         DEFINE_USB_TERMINAL_GUID(0x0713)
  4930.     DEFINE_GUIDSTRUCT("DFF220F3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SYNTHESIZER);
  4931.     #define KSNODETYPE_SYNTHESIZER DEFINE_GUIDNAMED(KSNODETYPE_SYNTHESIZER)
  4932.  
  4933.     // Microsoft's WDMAUD virtual swsynth pin name guid
  4934.  
  4935.     #define STATIC_KSNODETYPE_SWSYNTH\
  4936.         0x423274A0L, 0x8B81, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  4937.     DEFINE_GUIDSTRUCT("423274A0-8B81-11D1-A050-0000F8004788", KSNODETYPE_SWSYNTH);
  4938.     #define KSNODETYPE_SWSYNTH DEFINE_GUIDNAMED(KSNODETYPE_SWSYNTH)
  4939.  
  4940.     // Microsoft's SWMIDI midi pin and node name guid
  4941.  
  4942.     #define STATIC_KSNODETYPE_SWMIDI\
  4943.         0xCB9BEFA0L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  4944.     DEFINE_GUIDSTRUCT("CB9BEFA0-A251-11D1-A050-0000F8004788", KSNODETYPE_SWMIDI);
  4945.     #define KSNODETYPE_SWMIDI DEFINE_GUIDNAMED(KSNODETYPE_SWMIDI)
  4946.  
  4947.     #define STATIC_KSNODETYPE_DRM_DESCRAMBLE\
  4948.         0xFFBB6E3FL, 0xCCFE, 0x4D84, 0x90, 0xD9, 0x42, 0x14, 0x18, 0xB0, 0x3A, 0x8E
  4949.     DEFINE_GUIDSTRUCT("FFBB6E3F-CCFE-4D84-90D9-421418B03A8E", KSNODETYPE_DRM_DESCRAMBLE);
  4950.     #define KSNODETYPE_DRM_DESCRAMBLE DEFINE_GUIDNAMED(KSNODETYPE_DRM_DESCRAMBLE)
  4951.  
  4952.     // General categories
  4953.     #define STATIC_KSCATEGORY_AUDIO \
  4954.         0x6994AD04L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4955.     DEFINE_GUIDSTRUCT("6994AD04-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_AUDIO);
  4956.     #define KSCATEGORY_AUDIO DEFINE_GUIDNAMED(KSCATEGORY_AUDIO)
  4957.  
  4958.     #define STATIC_KSCATEGORY_VIDEO \
  4959.         0x6994AD05L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4960.     DEFINE_GUIDSTRUCT("6994AD05-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_VIDEO);
  4961.     #define KSCATEGORY_VIDEO DEFINE_GUIDNAMED(KSCATEGORY_VIDEO)
  4962.  
  4963.     #define STATIC_KSCATEGORY_TEXT \
  4964.         0x6994AD06L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4965.     DEFINE_GUIDSTRUCT("6994AD06-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_TEXT);
  4966.     #define KSCATEGORY_TEXT DEFINE_GUIDNAMED(KSCATEGORY_TEXT)
  4967.  
  4968.     #define STATIC_KSCATEGORY_NETWORK \
  4969.         0x67C9CC3CL, 0x69C4, 0x11D2, 0x87, 0x59, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4970.     DEFINE_GUIDSTRUCT("67C9CC3C-69C4-11D2-8759-00A0C9223196", KSCATEGORY_NETWORK);
  4971.     #define KSCATEGORY_NETWORK DEFINE_GUIDNAMED(KSCATEGORY_NETWORK)
  4972.  
  4973.     #define STATIC_KSCATEGORY_TOPOLOGY \
  4974.         0xDDA54A40L, 0x1E4C, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
  4975.     DEFINE_GUIDSTRUCT("DDA54A40-1E4C-11D1-A050-405705C10000", KSCATEGORY_TOPOLOGY);
  4976.     #define KSCATEGORY_TOPOLOGY DEFINE_GUIDNAMED(KSCATEGORY_TOPOLOGY)
  4977.  
  4978.     #define STATIC_KSCATEGORY_VIRTUAL \
  4979.         0x3503EAC4L, 0x1F26, 0x11D1, 0x8A, 0xB0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  4980.     DEFINE_GUIDSTRUCT("3503EAC4-1F26-11D1-8AB0-00A0C9223196", KSCATEGORY_VIRTUAL);
  4981.     #define KSCATEGORY_VIRTUAL DEFINE_GUIDNAMED(KSCATEGORY_VIRTUAL)
  4982.  
  4983.     #define STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL \
  4984.         0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  4985.     DEFINE_GUIDSTRUCT("BF963D80-C559-11D0-8A2B-00A0C9255AC1", KSCATEGORY_ACOUSTIC_ECHO_CANCEL);
  4986.     #define KSCATEGORY_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSCATEGORY_ACOUSTIC_ECHO_CANCEL)
  4987.  
  4988.  
  4989.     #define STATIC_KSCATEGORY_SYSAUDIO \
  4990.         0xA7C7A5B1L, 0x5AF3, 0x11D1, 0x9C, 0xED, 0x00, 0xA0, 0x24, 0xBF, 0x04, 0x07
  4991.     DEFINE_GUIDSTRUCT("A7C7A5B1-5AF3-11D1-9CED-00A024BF0407", KSCATEGORY_SYSAUDIO);
  4992.     #define KSCATEGORY_SYSAUDIO DEFINE_GUIDNAMED(KSCATEGORY_SYSAUDIO)
  4993.  
  4994.     #define STATIC_KSCATEGORY_WDMAUD \
  4995.         0x3E227E76L, 0x690D, 0x11D2, 0x81, 0x61, 0x00, 0x00, 0xF8, 0x77, 0x5B, 0xF1
  4996.     DEFINE_GUIDSTRUCT("3E227E76-690D-11D2-8161-0000F8775BF1", KSCATEGORY_WDMAUD);
  4997.     #define KSCATEGORY_WDMAUD DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD)
  4998.  
  4999.     #define STATIC_KSCATEGORY_AUDIO_GFX \
  5000.         0x9BAF9572L, 0x340C, 0x11D3, 0xAB, 0xDC, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0x6F
  5001.     DEFINE_GUIDSTRUCT("9BAF9572-340C-11D3-ABDC-00A0C90AB16F", KSCATEGORY_AUDIO_GFX);
  5002.     #define KSCATEGORY_AUDIO_GFX DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_GFX)
  5003.  
  5004.     #define STATIC_KSCATEGORY_AUDIO_SPLITTER \
  5005.         0x9EA331FAL, 0xB91B, 0x45F8, 0x92, 0x85, 0xBD, 0x2B, 0xC7, 0x7A, 0xFC, 0xDE
  5006.     DEFINE_GUIDSTRUCT("9EA331FA-B91B-45F8-9285-BD2BC77AFCDE", KSCATEGORY_AUDIO_SPLITTER);
  5007.     #define KSCATEGORY_AUDIO_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_SPLITTER)
  5008.  
  5009.     #define STATIC_KSCATEGORY_SYNTHESIZER STATIC_KSNODETYPE_SYNTHESIZER
  5010.     #define KSCATEGORY_SYNTHESIZER KSNODETYPE_SYNTHESIZER
  5011.  
  5012.     #define STATIC_KSCATEGORY_DRM_DESCRAMBLE STATIC_KSNODETYPE_DRM_DESCRAMBLE
  5013.     #define KSCATEGORY_DRM_DESCRAMBLE KSNODETYPE_DRM_DESCRAMBLE
  5014.  
  5015.     #define STATIC_KSCATEGORY_AUDIO_DEVICE \
  5016.         0xFBF6F530L, 0x07B9, 0x11D2, 0xA7, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  5017.     DEFINE_GUIDSTRUCT("FBF6F530-07B9-11D2-A71E-0000F8004788", KSCATEGORY_AUDIO_DEVICE);
  5018.     #define KSCATEGORY_AUDIO_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_DEVICE)
  5019.  
  5020.     #define STATIC_KSCATEGORY_PREFERRED_WAVEOUT_DEVICE \
  5021.         0xD6C5066EL, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  5022.     DEFINE_GUIDSTRUCT("D6C5066E-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEOUT_DEVICE);
  5023.     #define KSCATEGORY_PREFERRED_WAVEOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEOUT_DEVICE)
  5024.  
  5025.     #define STATIC_KSCATEGORY_PREFERRED_WAVEIN_DEVICE \
  5026.         0xD6C50671L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  5027.     DEFINE_GUIDSTRUCT("D6C50671-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEIN_DEVICE);
  5028.     #define KSCATEGORY_PREFERRED_WAVEIN_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEIN_DEVICE)
  5029.  
  5030.     #define STATIC_KSCATEGORY_PREFERRED_MIDIOUT_DEVICE \
  5031.         0xD6C50674L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  5032.     DEFINE_GUIDSTRUCT("D6C50674-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_MIDIOUT_DEVICE);
  5033.     #define KSCATEGORY_PREFERRED_MIDIOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_MIDIOUT_DEVICE)
  5034.  
  5035.     // Special pin category for wdmaud
  5036.  
  5037.     #define STATIC_KSCATEGORY_WDMAUD_USE_PIN_NAME \
  5038.         0x47A4FA20L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  5039.     DEFINE_GUIDSTRUCT("47A4FA20-A251-11D1-A050-0000F8004788", KSCATEGORY_WDMAUD_USE_PIN_NAME);
  5040.     #define KSCATEGORY_WDMAUD_USE_PIN_NAME DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD_USE_PIN_NAME)
  5041.  
  5042.     // Escalante Platform Interface
  5043.  
  5044.     #define STATIC_KSCATEGORY_ESCALANTE_PLATFORM_DRIVER \
  5045.         0x74f3aea8L, 0x9768, 0x11d1, 0x8e, 0x07, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e
  5046.     DEFINE_GUIDSTRUCT("74f3aea8-9768-11d1-8e07-00a0c95ec22e", KSCATEGORY_ESCALANTE_PLATFORM_DRIVER);
  5047.     #define KSCATEGORY_ESCALANTE_PLATFORM_DRIVER DEFINE_GUIDNAMED(KSCATEGORY_ESCALANTE_PLATFORM_DRIVER)
  5048.  
  5049.     // -- major types ---
  5050.  
  5051.     // 'vids' == MEDIATYPE_Video,
  5052.     #define STATIC_KSDATAFORMAT_TYPE_VIDEO\
  5053.         0x73646976L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  5054.     DEFINE_GUIDSTRUCT("73646976-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_VIDEO);
  5055.     #define KSDATAFORMAT_TYPE_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VIDEO)
  5056.  
  5057.     // 'auds' == MEDIATYPE_Audio
  5058.     #define STATIC_KSDATAFORMAT_TYPE_AUDIO\
  5059.         0x73647561L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  5060.     DEFINE_GUIDSTRUCT("73647561-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_AUDIO);
  5061.     #define KSDATAFORMAT_TYPE_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUDIO)
  5062.  
  5063.     // 'txts' == MEDIATYPE_Text
  5064.     #define STATIC_KSDATAFORMAT_TYPE_TEXT\
  5065.         0x73747874L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  5066.     DEFINE_GUIDSTRUCT("73747874-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_TEXT);
  5067.     #define KSDATAFORMAT_TYPE_TEXT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_TEXT)
  5068.  
  5069.     #if !defined( DEFINE_WAVEFORMATEX_GUID )
  5070.     #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  5071.     #endif
  5072.  
  5073.     #define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX\
  5074.         0x00000000L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  5075.     DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_WAVEFORMATEX);
  5076.     #define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX)
  5077.  
  5078.     #define INIT_WAVEFORMATEX_GUID(Guid, x)\
  5079.     {\
  5080.         *(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX;\
  5081.         (Guid)->Data1 = (USHORT)(x);\
  5082.     }
  5083.  
  5084.     #define EXTRACT_WAVEFORMATEX_ID(Guid)\
  5085.         (USHORT)((Guid)->Data1)
  5086.  
  5087.     #define IS_VALID_WAVEFORMATEX_GUID(Guid)\
  5088.         (!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT)))
  5089.  
  5090.     #if !defined(INIT_MMREG_MID)
  5091.     //{d5a47fa7-6d98-11d1-a21a-00a0c9223196}
  5092.     #define INIT_MMREG_MID(guid, id)\
  5093.     {\
  5094.         (guid)->Data1 = 0xd5a47fa7 + (USHORT)(id);\
  5095.         (guid)->Data2 = 0x6d98;\
  5096.         (guid)->Data3 = 0x11d1;\
  5097.         (guid)->Data4[0] = 0xa2;\
  5098.         (guid)->Data4[1] = 0x1a;\
  5099.         (guid)->Data4[2] = 0x00;\
  5100.         (guid)->Data4[3] = 0xa0;\
  5101.         (guid)->Data4[4] = 0xc9;\
  5102.         (guid)->Data4[5] = 0x22;\
  5103.         (guid)->Data4[6] = 0x31;\
  5104.         (guid)->Data4[7] = 0x96;\
  5105.     }
  5106.     #define EXTRACT_MMREG_MID(guid)\
  5107.         (USHORT)((guid)->Data1 - 0xd5a47fa7)
  5108.     #define DEFINE_MMREG_MID_GUID(id)\
  5109.         0xd5a47fa7+(USHORT)(id), 0x6d98, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  5110.  
  5111.     #define IS_COMPATIBLE_MMREG_MID(guid)\
  5112.         (((guid)->Data1 >= 0xd5a47fa7) &&\
  5113.         ((guid)->Data1 < 0xd5a47fa7 + 0xffff) &&\
  5114.         ((guid)->Data2 == 0x6d98) &&\
  5115.         ((guid)->Data3 == 0x11d1) &&\
  5116.         ((guid)->Data4[0] == 0xa2) &&\
  5117.         ((guid)->Data4[1] == 0x1a) &&\
  5118.         ((guid)->Data4[2] == 0x00) &&\
  5119.         ((guid)->Data4[3] == 0xa0) &&\
  5120.         ((guid)->Data4[4] == 0xc9) &&\
  5121.         ((guid)->Data4[5] == 0x22) &&\
  5122.         ((guid)->Data4[6] == 0x31) &&\
  5123.         ((guid)->Data4[7] == 0x96))
  5124.     #endif // !defined(INIT_MMREG_MID)
  5125.  
  5126.     #if !defined(INIT_MMREG_PID)
  5127.     //{e36dc2ac-6d9a-11d1-a21a-00a0c9223196}
  5128.     #define INIT_MMREG_PID(guid, id)\
  5129.     {\
  5130.         (guid)->Data1 = 0xe36dc2ac + (USHORT)(id);\
  5131.         (guid)->Data2 = 0x6d9a;\
  5132.         (guid)->Data3 = 0x11d1;\
  5133.         (guid)->Data4[0] = 0xa2;\
  5134.         (guid)->Data4[1] = 0x1a;\
  5135.         (guid)->Data4[2] = 0x00;\
  5136.         (guid)->Data4[3] = 0xa0;\
  5137.         (guid)->Data4[4] = 0xc9;\
  5138.         (guid)->Data4[5] = 0x22;\
  5139.         (guid)->Data4[6] = 0x31;\
  5140.         (guid)->Data4[7] = 0x96;\
  5141.     }
  5142.     #define EXTRACT_MMREG_PID(guid)\
  5143.         (USHORT)((guid)->Data1 - 0xe36dc2ac)
  5144.     #define DEFINE_MMREG_PID_GUID(id)\
  5145.         0xe36dc2ac+(USHORT)(id), 0x6d9a, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  5146.  
  5147.     #define IS_COMPATIBLE_MMREG_PID(guid)\
  5148.         (((guid)->Data1 >= 0xe36dc2ac) &&\
  5149.         ((guid)->Data1 < 0xe36dc2ac + 0xffff) &&\
  5150.         ((guid)->Data2 == 0x6d9a) &&\
  5151.         ((guid)->Data3 == 0x11d1) &&\
  5152.         ((guid)->Data4[0] == 0xa2) &&\
  5153.         ((guid)->Data4[1] == 0x1a) &&\
  5154.         ((guid)->Data4[2] == 0x00) &&\
  5155.         ((guid)->Data4[3] == 0xa0) &&\
  5156.         ((guid)->Data4[4] == 0xc9) &&\
  5157.         ((guid)->Data4[5] == 0x22) &&\
  5158.         ((guid)->Data4[6] == 0x31) &&\
  5159.         ((guid)->Data4[7] == 0x96))
  5160.     #endif // !defined(INIT_MMREG_PID)
  5161.  
  5162.     #define STATIC_KSDATAFORMAT_SUBTYPE_ANALOG\
  5163.         0x6dba3190L, 0x67bd, 0x11cf, 0xa0, 0xf7, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  5164.     DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4", KSDATAFORMAT_SUBTYPE_ANALOG);
  5165.     #define KSDATAFORMAT_SUBTYPE_ANALOG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ANALOG)
  5166.  
  5167.     #define STATIC_KSDATAFORMAT_SUBTYPE_PCM\
  5168.         DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM)
  5169.     DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_PCM);
  5170.     #define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM)
  5171.  
  5172.     #if defined(_INC_MMREG)
  5173.     #define STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\
  5174.         DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_IEEE_FLOAT)
  5175.     DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
  5176.     #define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)
  5177.  
  5178.     #define STATIC_KSDATAFORMAT_SUBTYPE_DRM\
  5179.         DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DRM)
  5180.     DEFINE_GUIDSTRUCT("00000009-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_DRM);
  5181.     #define KSDATAFORMAT_SUBTYPE_DRM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DRM)
  5182.  
  5183.     #define STATIC_KSDATAFORMAT_SUBTYPE_ALAW\
  5184.         DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ALAW)
  5185.     DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ALAW);
  5186.     #define KSDATAFORMAT_SUBTYPE_ALAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ALAW)
  5187.  
  5188.     #define STATIC_KSDATAFORMAT_SUBTYPE_MULAW\
  5189.         DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MULAW)
  5190.     DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MULAW);
  5191.     #define KSDATAFORMAT_SUBTYPE_MULAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MULAW)
  5192.  
  5193.     #define STATIC_KSDATAFORMAT_SUBTYPE_ADPCM\
  5194.         DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ADPCM)
  5195.     DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ADPCM);
  5196.     #define KSDATAFORMAT_SUBTYPE_ADPCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ADPCM)
  5197.  
  5198.     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG\
  5199.         DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MPEG)
  5200.     DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MPEG);
  5201.     #define KSDATAFORMAT_SUBTYPE_MPEG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG)
  5202.     #endif // defined(_INC_MMREG)
  5203.  
  5204.     #define STATIC_KSDATAFORMAT_SPECIFIER_VC_ID\
  5205.         0xAD98D184L, 0xAAC3, 0x11D0, 0xA4, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  5206.     DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196", KSDATAFORMAT_SPECIFIER_VC_ID);
  5207.     #define KSDATAFORMAT_SPECIFIER_VC_ID DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VC_ID)
  5208.  
  5209.     #define STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX\
  5210.         0x05589f81L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  5211.     DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_WAVEFORMATEX);
  5212.     #define KSDATAFORMAT_SPECIFIER_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
  5213.  
  5214.     #define STATIC_KSDATAFORMAT_SPECIFIER_DSOUND\
  5215.         0x518590a2L, 0xa184, 0x11d0, 0x85, 0x22, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  5216.     DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3", KSDATAFORMAT_SPECIFIER_DSOUND);
  5217.     #define KSDATAFORMAT_SPECIFIER_DSOUND DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DSOUND)
  5218.  
  5219.     #if defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
  5220.     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  5221.     #include <pshpack1.h>
  5222.     #endif
  5223.     typedef struct {
  5224.         KSDATAFORMAT    DataFormat;
  5225.         WAVEFORMATEX    WaveFormatEx;
  5226.     } KSDATAFORMAT_WAVEFORMATEX, *PKSDATAFORMAT_WAVEFORMATEX;
  5227.  
  5228.     #ifndef _WAVEFORMATEXTENSIBLE_
  5229.     #define _WAVEFORMATEXTENSIBLE_
  5230.     typedef struct {
  5231.         WAVEFORMATEX    Format;
  5232.         union {
  5233.             WORD wValidBitsPerSample;       /* bits of precision  */
  5234.             WORD wSamplesPerBlock;          /* valid if wBitsPerSample==0 */
  5235.             WORD wReserved;                 /* If neither applies, set to zero. */
  5236.         } Samples;
  5237.         DWORD           dwChannelMask;      /* which channels are */
  5238.                                             /* present in stream  */
  5239.         GUID            SubFormat;
  5240.     } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
  5241.     #endif // !_WAVEFORMATEXTENSIBLE_
  5242.  
  5243.     #if !defined(WAVE_FORMAT_EXTENSIBLE)
  5244.     #define  WAVE_FORMAT_EXTENSIBLE                 0xFFFE
  5245.     #endif // !defined(WAVE_FORMAT_EXTENSIBLE)
  5246.  
  5247.     // DirectSound buffer description
  5248.     typedef struct {
  5249.         ULONG               Flags;
  5250.         ULONG               Control;
  5251.         WAVEFORMATEX        WaveFormatEx;
  5252.     } KSDSOUND_BUFFERDESC, *PKSDSOUND_BUFFERDESC;
  5253.  
  5254.     // DirectSound format
  5255.     typedef struct {
  5256.         KSDATAFORMAT        DataFormat;
  5257.         KSDSOUND_BUFFERDESC BufferDesc;
  5258.     } KSDATAFORMAT_DSOUND, *PKSDATAFORMAT_DSOUND;
  5259.  
  5260.     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  5261.     #include <poppack.h>
  5262.     #endif
  5263.     #endif // defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
  5264.  
  5265.  
  5266.  
  5267.     // DirectSound buffer flags
  5268.     #define KSDSOUND_BUFFER_PRIMARY             0x00000001
  5269.     #define KSDSOUND_BUFFER_STATIC              0x00000002
  5270.     #define KSDSOUND_BUFFER_LOCHARDWARE         0x00000004
  5271.     #define KSDSOUND_BUFFER_LOCSOFTWARE         0x00000008
  5272.  
  5273.     // DirectSound buffer control flags
  5274.     #define KSDSOUND_BUFFER_CTRL_3D             0x00000001
  5275.     #define KSDSOUND_BUFFER_CTRL_FREQUENCY      0x00000002
  5276.     #define KSDSOUND_BUFFER_CTRL_PAN            0x00000004
  5277.     #define KSDSOUND_BUFFER_CTRL_VOLUME         0x00000008
  5278.     #define KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY 0x00000010
  5279.  
  5280.     #define KSDSOUND_BUFFER_CTRL_HRTF_3D        0x40000000
  5281.  
  5282.     typedef struct {
  5283.     #if defined(_NTDDK_)
  5284.         ULONGLONG        PlayOffset;
  5285.         ULONGLONG        WriteOffset;
  5286.     #else // !_NTDDK_
  5287.         DWORDLONG        PlayOffset;
  5288.         DWORDLONG        WriteOffset;
  5289.     #endif // !_NTDDK_
  5290.     } KSAUDIO_POSITION, *PKSAUDIO_POSITION;
  5291.  
  5292.     // DirectSound3D FIR context
  5293.     typedef struct {
  5294.         LONG                Channel;
  5295.         FLOAT               VolSmoothScale;
  5296.         FLOAT               TotalDryAttenuation;
  5297.         FLOAT               TotalWetAttenuation;
  5298.         LONG                SmoothFrequency;
  5299.         LONG                Delay;
  5300.     } KSDS3D_ITD_PARAMS, *PKSDS3D_ITD_PARAMS;
  5301.  
  5302.     typedef struct {
  5303.         ULONG                 Enabled;
  5304.         KSDS3D_ITD_PARAMS     LeftParams;
  5305.         KSDS3D_ITD_PARAMS     RightParams;
  5306.         ULONG                 Reserved;
  5307.     } KSDS3D_ITD_PARAMS_MSG, *PKSDS3D_ITD_PARAMS_MSG;
  5308.  
  5309.     // DirectSound3D HRTF messages
  5310.  
  5311.     typedef struct {
  5312.         ULONG                   Size;           // This is the size of the struct in bytes
  5313.         ULONG                   Enabled;
  5314.         BOOL                    SwapChannels;
  5315.         BOOL                    ZeroAzimuth;
  5316.         BOOL                    CrossFadeOutput;
  5317.         ULONG                   FilterSize;     // This is the additional size of the filter coeff in bytes
  5318.     } KSDS3D_HRTF_PARAMS_MSG, *PKSDS3D_HRTF_PARAMS_MSG;
  5319.  
  5320.  
  5321.     // HRTF filter quality levels
  5322.     typedef enum {
  5323.         FULL_FILTER,
  5324.         LIGHT_FILTER,
  5325.         KSDS3D_FILTER_QUALITY_COUNT
  5326.     } KSDS3D_HRTF_FILTER_QUALITY;
  5327.  
  5328.     typedef struct {
  5329.         ULONG                       Size;       // This is the size of the struct in bytes
  5330.         KSDS3D_HRTF_FILTER_QUALITY  Quality;
  5331.         FLOAT                       SampleRate;
  5332.         ULONG                       MaxFilterSize;
  5333.         ULONG                       FilterTransientMuteLength;
  5334.         ULONG                       FilterOverlapBufferLength;
  5335.         ULONG                       OutputOverlapBufferLength;
  5336.         ULONG                       Reserved;
  5337.     } KSDS3D_HRTF_INIT_MSG, *PKSDS3D_HRTF_INIT_MSG;
  5338.  
  5339.     // Coefficient formats
  5340.     typedef enum {
  5341.         FLOAT_COEFF,
  5342.         SHORT_COEFF,
  5343.         KSDS3D_COEFF_COUNT
  5344.     } KSDS3D_HRTF_COEFF_FORMAT;
  5345.  
  5346.     // Filter methods
  5347.     typedef enum {
  5348.         DIRECT_FORM,
  5349.         CASCADE_FORM,
  5350.         KSDS3D_FILTER_METHOD_COUNT
  5351.     } KSDS3D_HRTF_FILTER_METHOD;
  5352.  
  5353.     // Filter methods
  5354.     typedef enum {
  5355.         DS3D_HRTF_VERSION_1
  5356.     } KSDS3D_HRTF_FILTER_VERSION;
  5357.  
  5358.     typedef struct {
  5359.         KSDS3D_HRTF_FILTER_METHOD    FilterMethod;
  5360.         KSDS3D_HRTF_COEFF_FORMAT     CoeffFormat;
  5361.         KSDS3D_HRTF_FILTER_VERSION   Version;
  5362.         ULONG                        Reserved;
  5363.     } KSDS3D_HRTF_FILTER_FORMAT_MSG, *PKSDS3D_HRTF_FILTER_FORMAT_MSG;
  5364.  
  5365.     //===========================================================================
  5366.     // DirectSound3D HAL
  5367.  
  5368.  
  5369.     typedef struct _DS3DVECTOR {
  5370.         union {
  5371.             FLOAT x;
  5372.             FLOAT dvX;
  5373.         };
  5374.         union {
  5375.             FLOAT y;
  5376.             FLOAT dvY;
  5377.         };
  5378.         union {
  5379.             FLOAT z;
  5380.             FLOAT dvZ;
  5381.         };
  5382.     } DS3DVECTOR, *PDS3DVECTOR;
  5383.  
  5384.  
  5385.     //===========================================================================
  5386.     //===========================================================================
  5387.  
  5388.     // KSPROPSETID_DirectSound3DListener : {437B3414-D060-11d0-8583-00C04FD9BAF3}
  5389.  
  5390.     #define STATIC_KSPROPSETID_DirectSound3DListener\
  5391.         0x437b3414L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  5392.     DEFINE_GUIDSTRUCT("437b3414-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DListener);
  5393.     #define KSPROPSETID_DirectSound3DListener DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DListener)
  5394.  
  5395.     typedef enum {
  5396.         KSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
  5397.         KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
  5398.         KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
  5399.         KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
  5400.         KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
  5401.         KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
  5402.         KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
  5403.         KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
  5404.         KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
  5405.     } KSPROPERTY_DIRECTSOUND3DLISTENER;
  5406.  
  5407.     typedef struct {
  5408.         DS3DVECTOR  Position;
  5409.         DS3DVECTOR  Velocity;
  5410.         DS3DVECTOR  OrientFront;
  5411.         DS3DVECTOR  OrientTop;
  5412.         FLOAT       DistanceFactor;
  5413.         FLOAT       RolloffFactor;
  5414.         FLOAT       DopplerFactor;
  5415.     } KSDS3D_LISTENER_ALL, *PKSDS3D_LISTENER_ALL;
  5416.  
  5417.     typedef struct {
  5418.         DS3DVECTOR  Front;
  5419.         DS3DVECTOR  Top;
  5420.     } KSDS3D_LISTENER_ORIENTATION, *PKSDS3D_LISTENER_ORIENTATION;
  5421.  
  5422.  
  5423.     //===========================================================================
  5424.     //===========================================================================
  5425.     // KSPROPSETID_DirectSound3DBuffer : {437B3411-D060-11d0-8583-00C04FD9BAF3}
  5426.  
  5427.     #define STATIC_KSPROPSETID_DirectSound3DBuffer\
  5428.         0x437b3411L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  5429.     DEFINE_GUIDSTRUCT("437b3411-d060-11d0-8583-00c04fd9baf3", KSPROPSETID_DirectSound3DBuffer);
  5430.     #define KSPROPSETID_DirectSound3DBuffer DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DBuffer)
  5431.  
  5432.  
  5433.     typedef enum {
  5434.         KSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
  5435.         KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
  5436.         KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
  5437.         KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
  5438.         KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
  5439.         KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
  5440.         KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
  5441.         KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
  5442.         KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
  5443.     } KSPROPERTY_DIRECTSOUND3DBUFFER;
  5444.  
  5445.  
  5446.     typedef struct {
  5447.         DS3DVECTOR  Position;
  5448.         DS3DVECTOR  Velocity;
  5449.         ULONG       InsideConeAngle;
  5450.         ULONG       OutsideConeAngle;
  5451.         DS3DVECTOR  ConeOrientation;
  5452.         LONG        ConeOutsideVolume;
  5453.         FLOAT       MinDistance;
  5454.         FLOAT       MaxDistance;
  5455.         ULONG       Mode;
  5456.     } KSDS3D_BUFFER_ALL, *PKSDS3D_BUFFER_ALL;
  5457.  
  5458.     typedef struct {
  5459.         ULONG  InsideConeAngle;
  5460.         ULONG  OutsideConeAngle;
  5461.     } KSDS3D_BUFFER_CONE_ANGLES, *PKSDS3D_BUFFER_CONE_ANGLES;
  5462.  
  5463.     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE   (-1)
  5464.     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN         5
  5465.     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW      10
  5466.     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE        20
  5467.     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX         180
  5468.  
  5469.     #define KSDSOUND_3D_MODE_NORMAL          0x00000000
  5470.     #define KSDSOUND_3D_MODE_HEADRELATIVE    0x00000001
  5471.     #define KSDSOUND_3D_MODE_DISABLE         0x00000002
  5472.  
  5473.     typedef struct {
  5474.        KSDATARANGE              DataRange;
  5475.        ULONG                    MaximumChannels;
  5476.        ULONG                    MinimumBitsPerSample;
  5477.        ULONG                    MaximumBitsPerSample;
  5478.        ULONG                    MinimumSampleFrequency;
  5479.        ULONG                    MaximumSampleFrequency;
  5480.     } KSDATARANGE_AUDIO, *PKSDATARANGE_AUDIO;
  5481.  
  5482.     //---------------------------------------------------------------------------
  5483.  
  5484.     #define STATIC_KSDATAFORMAT_SUBTYPE_RIFF\
  5485.         0x4995DAEEL, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  5486.     DEFINE_GUIDSTRUCT("4995DAEE-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFF);
  5487.     #define KSDATAFORMAT_SUBTYPE_RIFF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFF)
  5488.  
  5489.     #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFWAVE\
  5490.         0xe436eb8bL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  5491.     DEFINE_GUIDSTRUCT("e436eb8b-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_RIFFWAVE);
  5492.     #define KSDATAFORMAT_SUBTYPE_RIFFWAVE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFWAVE)
  5493.  
  5494.     //===========================================================================
  5495.     //===========================================================================
  5496.  
  5497.     #define STATIC_KSPROPSETID_Bibliographic \
  5498.         0x07BA150EL, 0xE2B1, 0x11D0, 0xAC, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  5499.     DEFINE_GUIDSTRUCT("07BA150E-E2B1-11D0-AC17-00A0C9223196", KSPROPSETID_Bibliographic);
  5500.     #define KSPROPSETID_Bibliographic DEFINE_GUIDNAMED(KSPROPSETID_Bibliographic)
  5501.  
  5502.     //Repeatable tags contain all entries within the property, each preceeded by length
  5503.     typedef enum {
  5504.         KSPROPERTY_BIBLIOGRAPHIC_LEADER = 'RDL ',
  5505.         KSPROPERTY_BIBLIOGRAPHIC_LCCN = '010 ',
  5506.         KSPROPERTY_BIBLIOGRAPHIC_ISBN = '020 ',
  5507.         KSPROPERTY_BIBLIOGRAPHIC_ISSN = '220 ',
  5508.         KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE = '040 ',
  5509.         KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME = '001 ',
  5510.         KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY = '011 ',
  5511.         KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME = '111 ',
  5512.         KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE = '031 ',
  5513.         KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE = '042 ',
  5514.         KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT = '542 ',
  5515.         KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE = '642 ',
  5516.         KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION = '062 ',
  5517.         KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION = '003 ',
  5518.         KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE = '044 ',
  5519.         KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT = '094 ',
  5520.         KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE = '005 ',
  5521.         KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE = '405 ',
  5522.         KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE = '505 ',
  5523.         KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT = '805 ',
  5524.         KSPROPERTY_BIBLIOGRAPHIC_CITATION = '015 ',
  5525.         KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT = '115 ',
  5526.         KSPROPERTY_BIBLIOGRAPHIC_SUMMARY = '025 ',
  5527.         KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE = '125 ',
  5528.         KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE = '035 ',
  5529.         KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS = '835 ',
  5530.         KSPROPERTY_BIBLIOGRAPHIC_AWARDS = '685 ',
  5531.         KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME = '006 ',
  5532.         KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM = '056 ',
  5533.         KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC = '156 ',
  5534.         KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE = '556 ',
  5535.         KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM = '856 ',
  5536.         KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE = '037 ',
  5537.         KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED = '047 ',
  5538.         KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ',
  5539.         KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 '
  5540.     } KSPROPERTY_BIBLIOGRAPHIC;
  5541.  
  5542.     #define STATIC_KSPROPSETID_TopologyNode\
  5543.         0x45FFAAA1L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  5544.     DEFINE_GUIDSTRUCT("45FFAAA1-6E1B-11D0-BCF2-444553540000", KSPROPSETID_TopologyNode);
  5545.     #define KSPROPSETID_TopologyNode DEFINE_GUIDNAMED(KSPROPSETID_TopologyNode)
  5546.  
  5547.     typedef enum {
  5548.         KSPROPERTY_TOPOLOGYNODE_ENABLE = 1,
  5549.         KSPROPERTY_TOPOLOGYNODE_RESET
  5550.     } KSPROPERTY_TOPOLOGYNODE;
  5551.  
  5552.     //===========================================================================
  5553.     #define STATIC_KSPROPSETID_DrmAudioStream\
  5554.         0x2f2c8ddd, 0x4198, 0x4fac, 0xba, 0x29, 0x61, 0xbb, 0x5, 0xb7, 0xde, 0x6
  5555.     DEFINE_GUIDSTRUCT("2F2C8DDD-4198-4fac-BA29-61BB05B7DE06", KSPROPSETID_DrmAudioStream);
  5556.     #define KSPROPSETID_DrmAudioStream DEFINE_GUIDNAMED(KSPROPSETID_DrmAudioStream)
  5557.  
  5558.     typedef enum {
  5559.         KSPROPERTY_DRMAUDIOSTREAM_CONTENTID,
  5560.         KSPROPERTY_DRMAUDIOSTREAM_AUTHENTICATEFUNCTION
  5561.     } KSPROPERTY_DRMAUDIOSTREAM;
  5562.  
  5563.     //===========================================================================
  5564.     #define STATIC_KSPROPSETID_Audio\
  5565.         0x45FFAAA0L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  5566.     DEFINE_GUIDSTRUCT("45FFAAA0-6E1B-11D0-BCF2-444553540000", KSPROPSETID_Audio);
  5567.     #define KSPROPSETID_Audio DEFINE_GUIDNAMED(KSPROPSETID_Audio)
  5568.  
  5569.     typedef enum {
  5570.         KSPROPERTY_AUDIO_LATENCY = 1,
  5571.         KSPROPERTY_AUDIO_COPY_PROTECTION,
  5572.         KSPROPERTY_AUDIO_CHANNEL_CONFIG,
  5573.         KSPROPERTY_AUDIO_VOLUMELEVEL,
  5574.         KSPROPERTY_AUDIO_POSITION,
  5575.         KSPROPERTY_AUDIO_DYNAMIC_RANGE,
  5576.         KSPROPERTY_AUDIO_QUALITY,
  5577.         KSPROPERTY_AUDIO_SAMPLING_RATE,
  5578.         KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE,
  5579.         KSPROPERTY_AUDIO_MIX_LEVEL_TABLE,
  5580.         KSPROPERTY_AUDIO_MIX_LEVEL_CAPS,
  5581.         KSPROPERTY_AUDIO_MUX_SOURCE,
  5582.         KSPROPERTY_AUDIO_MUTE,
  5583.         KSPROPERTY_AUDIO_BASS,
  5584.         KSPROPERTY_AUDIO_MID,
  5585.         KSPROPERTY_AUDIO_TREBLE,
  5586.         KSPROPERTY_AUDIO_BASS_BOOST,
  5587.         KSPROPERTY_AUDIO_EQ_LEVEL,
  5588.         KSPROPERTY_AUDIO_NUM_EQ_BANDS,
  5589.         KSPROPERTY_AUDIO_EQ_BANDS,
  5590.         KSPROPERTY_AUDIO_AGC,
  5591.         KSPROPERTY_AUDIO_DELAY,
  5592.         KSPROPERTY_AUDIO_LOUDNESS,
  5593.         KSPROPERTY_AUDIO_WIDE_MODE,
  5594.         KSPROPERTY_AUDIO_WIDENESS,
  5595.         KSPROPERTY_AUDIO_REVERB_LEVEL,
  5596.         KSPROPERTY_AUDIO_CHORUS_LEVEL,
  5597.         KSPROPERTY_AUDIO_DEV_SPECIFIC,
  5598.         KSPROPERTY_AUDIO_DEMUX_DEST,
  5599.         KSPROPERTY_AUDIO_STEREO_ENHANCE,
  5600.         KSPROPERTY_AUDIO_MANUFACTURE_GUID,
  5601.         KSPROPERTY_AUDIO_PRODUCT_GUID,
  5602.         KSPROPERTY_AUDIO_CPU_RESOURCES,
  5603.         KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY,
  5604.         KSPROPERTY_AUDIO_SURROUND_ENCODE,
  5605.         KSPROPERTY_AUDIO_3D_INTERFACE,
  5606.         KSPROPERTY_AUDIO_PEAKMETER,
  5607.         KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
  5608.     } KSPROPERTY_AUDIO;
  5609.  
  5610.     // Audio quality constants
  5611.     #define KSAUDIO_QUALITY_WORST               0x0
  5612.     #define KSAUDIO_QUALITY_PC                  0x1
  5613.     #define KSAUDIO_QUALITY_BASIC               0x2
  5614.     #define KSAUDIO_QUALITY_ADVANCED            0x3
  5615.  
  5616.     // Audio CPU resource constants
  5617.     #define KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU  0x00000000
  5618.     #define KSAUDIO_CPU_RESOURCES_HOST_CPU      0x7FFFFFFF
  5619.  
  5620.     typedef struct {
  5621.         BOOL    fCopyrighted;
  5622.         BOOL    fOriginal;
  5623.     } KSAUDIO_COPY_PROTECTION, *PKSAUDIO_COPY_PROTECTION;
  5624.  
  5625.     typedef struct {
  5626.         LONG    ActiveSpeakerPositions;
  5627.     } KSAUDIO_CHANNEL_CONFIG, *PKSAUDIO_CHANNEL_CONFIG;
  5628.  
  5629.     // Speaker Positions:
  5630.     #define SPEAKER_FRONT_LEFT              0x1
  5631.     #define SPEAKER_FRONT_RIGHT             0x2
  5632.     #define SPEAKER_FRONT_CENTER            0x4
  5633.     #define SPEAKER_LOW_FREQUENCY           0x8
  5634.     #define SPEAKER_BACK_LEFT               0x10
  5635.     #define SPEAKER_BACK_RIGHT              0x20
  5636.     #define SPEAKER_FRONT_LEFT_OF_CENTER    0x40
  5637.     #define SPEAKER_FRONT_RIGHT_OF_CENTER   0x80
  5638.     #define SPEAKER_BACK_CENTER             0x100
  5639.     #define SPEAKER_SIDE_LEFT               0x200
  5640.     #define SPEAKER_SIDE_RIGHT              0x400
  5641.     #define SPEAKER_TOP_CENTER              0x800
  5642.     #define SPEAKER_TOP_FRONT_LEFT          0x1000
  5643.     #define SPEAKER_TOP_FRONT_CENTER        0x2000
  5644.     #define SPEAKER_TOP_FRONT_RIGHT         0x4000
  5645.     #define SPEAKER_TOP_BACK_LEFT           0x8000
  5646.     #define SPEAKER_TOP_BACK_CENTER         0x10000
  5647.     #define SPEAKER_TOP_BACK_RIGHT          0x20000
  5648.  
  5649.     // Bit mask locations reserved for future use
  5650.     #define SPEAKER_RESERVED                0x7FFC0000
  5651.  
  5652.     // Used to specify that any possible permutation of speaker configurations
  5653.     #define SPEAKER_ALL                     0x80000000
  5654.  
  5655.     // DirectSound Speaker Config
  5656.     #define KSAUDIO_SPEAKER_MONO            (SPEAKER_FRONT_CENTER)
  5657.     #define KSAUDIO_SPEAKER_STEREO          (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
  5658.     #define KSAUDIO_SPEAKER_QUAD            (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  5659.                                              SPEAKER_BACK_LEFT  | SPEAKER_BACK_RIGHT)
  5660.     #define KSAUDIO_SPEAKER_SURROUND        (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  5661.                                              SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
  5662.     #define KSAUDIO_SPEAKER_5POINT1         (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  5663.                                              SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
  5664.                                              SPEAKER_BACK_LEFT  | SPEAKER_BACK_RIGHT)
  5665.     #define KSAUDIO_SPEAKER_7POINT1         (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  5666.                                              SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
  5667.                                              SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \
  5668.                                              SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
  5669.  
  5670.     // DVD Speaker Positions
  5671.     #define KSAUDIO_SPEAKER_GROUND_FRONT_LEFT   SPEAKER_FRONT_LEFT
  5672.     #define KSAUDIO_SPEAKER_GROUND_FRONT_CENTER SPEAKER_FRONT_CENTER
  5673.     #define KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT  SPEAKER_FRONT_RIGHT
  5674.     #define KSAUDIO_SPEAKER_GROUND_REAR_LEFT    SPEAKER_BACK_LEFT
  5675.     #define KSAUDIO_SPEAKER_GROUND_REAR_RIGHT   SPEAKER_BACK_RIGHT
  5676.     #define KSAUDIO_SPEAKER_TOP_MIDDLE          SPEAKER_TOP_CENTER
  5677.     #define KSAUDIO_SPEAKER_SUPER_WOOFER        SPEAKER_LOW_FREQUENCY
  5678.  
  5679.     typedef struct {
  5680.         ULONG   QuietCompression;
  5681.         ULONG   LoudCompression;
  5682.     } KSAUDIO_DYNAMIC_RANGE, *PKSAUDIO_DYNAMIC_RANGE;
  5683.  
  5684.     typedef struct {
  5685.         BOOL    Mute;
  5686.         LONG    Level;
  5687.     } KSAUDIO_MIXLEVEL, *PKSAUDIO_MIXLEVEL;
  5688.  
  5689.     typedef struct {
  5690.         BOOL    Mute;
  5691.         LONG    Minimum;
  5692.         LONG    Maximum;
  5693.         LONG    Reset;
  5694.     } KSAUDIO_MIX_CAPS, *PKSAUDIO_MIX_CAPS;
  5695.  
  5696.     typedef struct {
  5697.         ULONG               InputChannels;
  5698.         ULONG               OutputChannels;
  5699.         KSAUDIO_MIX_CAPS    Capabilities[1];
  5700.     } KSAUDIO_MIXCAP_TABLE, *PKSAUDIO_MIXCAP_TABLE;
  5701.  
  5702.     typedef enum {
  5703.         SE_TECH_NONE,
  5704.         SE_TECH_ANALOG_DEVICES_PHAT,
  5705.         SE_TECH_CREATIVE,
  5706.         SE_TECH_NATIONAL_SEMI,
  5707.         SE_TECH_YAMAHA_YMERSION,
  5708.         SE_TECH_BBE,
  5709.         SE_TECH_CRYSTAL_SEMI,
  5710.         SE_TECH_QSOUND_QXPANDER,
  5711.         SE_TECH_SPATIALIZER,
  5712.         SE_TECH_SRS,
  5713.         SE_TECH_PLATFORM_TECH,
  5714.         SE_TECH_AKM,
  5715.         SE_TECH_AUREAL,
  5716.         SE_TECH_AZTECH,
  5717.         SE_TECH_BINAURA,
  5718.         SE_TECH_ESS_TECH,
  5719.         SE_TECH_HARMAN_VMAX,
  5720.         SE_TECH_NVIDEA,
  5721.         SE_TECH_PHILIPS_INCREDIBLE,
  5722.         SE_TECH_TEXAS_INST,
  5723.         SE_TECH_VLSI_TECH
  5724.     } SE_TECHNIQUE;
  5725.  
  5726.     typedef struct {
  5727.         SE_TECHNIQUE    Technique;
  5728.         ULONG   Center;
  5729.         ULONG   Depth;
  5730.         ULONG   Reserved;
  5731.     } KSAUDIO_STEREO_ENHANCE, *PKSAUDIO_STEREO_ENHANCE;
  5732.  
  5733.     //===========================================================================
  5734.     // Topology Node Type GUIDs
  5735.  
  5736.     #define STATIC_KSNODETYPE_DAC\
  5737.         0x507AE360L, 0xC554, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5738.     DEFINE_GUIDSTRUCT("507AE360-C554-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DAC);
  5739.     #define KSNODETYPE_DAC DEFINE_GUIDNAMED(KSNODETYPE_DAC)
  5740.  
  5741.     #define STATIC_KSNODETYPE_ADC\
  5742.         0x4D837FE0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5743.     DEFINE_GUIDSTRUCT("4D837FE0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_ADC);
  5744.     #define KSNODETYPE_ADC DEFINE_GUIDNAMED(KSNODETYPE_ADC)
  5745.  
  5746.     #define STATIC_KSNODETYPE_SRC\
  5747.         0x9DB7B9E0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5748.     DEFINE_GUIDSTRUCT("9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SRC);
  5749.     #define KSNODETYPE_SRC DEFINE_GUIDNAMED(KSNODETYPE_SRC)
  5750.  
  5751.     #define STATIC_KSNODETYPE_SUPERMIX\
  5752.         0xE573ADC0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5753.     DEFINE_GUIDSTRUCT("E573ADC0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUPERMIX);
  5754.     #define KSNODETYPE_SUPERMIX DEFINE_GUIDNAMED(KSNODETYPE_SUPERMIX)
  5755.  
  5756.     #define STATIC_KSNODETYPE_MUX\
  5757.         0x2CEAF780L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5758.     DEFINE_GUIDSTRUCT("2CEAF780-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUX);
  5759.     #define KSNODETYPE_MUX DEFINE_GUIDNAMED(KSNODETYPE_MUX)
  5760.  
  5761.     #define STATIC_KSNODETYPE_DEMUX\
  5762.         0xC0EB67D4L, 0xE807, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5763.     DEFINE_GUIDSTRUCT("C0EB67D4-E807-11D0-958A-00C04FB925D3", KSNODETYPE_DEMUX);
  5764.     #define KSNODETYPE_DEMUX DEFINE_GUIDNAMED(KSNODETYPE_DEMUX)
  5765.  
  5766.     #define STATIC_KSNODETYPE_SUM\
  5767.         0xDA441A60L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5768.     DEFINE_GUIDSTRUCT("DA441A60-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUM);
  5769.     #define KSNODETYPE_SUM DEFINE_GUIDNAMED(KSNODETYPE_SUM)
  5770.  
  5771.     #define STATIC_KSNODETYPE_MUTE\
  5772.         0x02B223C0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5773.     DEFINE_GUIDSTRUCT("02B223C0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUTE);
  5774.     #define KSNODETYPE_MUTE DEFINE_GUIDNAMED(KSNODETYPE_MUTE)
  5775.  
  5776.     #define STATIC_KSNODETYPE_VOLUME\
  5777.         0x3A5ACC00L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5778.     DEFINE_GUIDSTRUCT("3A5ACC00-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_VOLUME);
  5779.     #define KSNODETYPE_VOLUME DEFINE_GUIDNAMED(KSNODETYPE_VOLUME)
  5780.  
  5781.     #define STATIC_KSNODETYPE_TONE\
  5782.         0x7607E580L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5783.     DEFINE_GUIDSTRUCT("7607E580-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_TONE);
  5784.     #define KSNODETYPE_TONE DEFINE_GUIDNAMED(KSNODETYPE_TONE)
  5785.  
  5786.     #define STATIC_KSNODETYPE_EQUALIZER\
  5787.         0x9D41B4A0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5788.     DEFINE_GUIDSTRUCT("9D41B4A0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_EQUALIZER);
  5789.     #define KSNODETYPE_EQUALIZER DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZER)
  5790.  
  5791.     #define STATIC_KSNODETYPE_AGC\
  5792.         0xE88C9BA0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5793.     DEFINE_GUIDSTRUCT("E88C9BA0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_AGC);
  5794.     #define KSNODETYPE_AGC DEFINE_GUIDNAMED(KSNODETYPE_AGC)
  5795.  
  5796.     #define STATIC_KSNODETYPE_NOISE_SUPPRESS\
  5797.         0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5
  5798.     DEFINE_GUIDSTRUCT("E07F903F-62FD-4e60-8CDD-DEA7236665B5", KSNODETYPE_NOISE_SUPPRESS);
  5799.     #define KSNODETYPE_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSNODETYPE_NOISE_SUPPRESS)
  5800.  
  5801.     #define STATIC_KSNODETYPE_DELAY\
  5802.         0x144981E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5803.     DEFINE_GUIDSTRUCT("144981E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DELAY);
  5804.     #define KSNODETYPE_DELAY DEFINE_GUIDNAMED(KSNODETYPE_DELAY)
  5805.  
  5806.     #define STATIC_KSNODETYPE_LOUDNESS\
  5807.         0x41887440L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5808.     DEFINE_GUIDSTRUCT("41887440-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_LOUDNESS);
  5809.     #define KSNODETYPE_LOUDNESS DEFINE_GUIDNAMED(KSNODETYPE_LOUDNESS)
  5810.  
  5811.     #define STATIC_KSNODETYPE_PROLOGIC_DECODER\
  5812.         0x831C2C80L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5813.     DEFINE_GUIDSTRUCT("831C2C80-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_PROLOGIC_DECODER);
  5814.     #define KSNODETYPE_PROLOGIC_DECODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_DECODER)
  5815.  
  5816.     #define STATIC_KSNODETYPE_STEREO_WIDE\
  5817.         0xA9E69800L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5818.     DEFINE_GUIDSTRUCT("A9E69800-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_STEREO_WIDE);
  5819.     #define KSNODETYPE_STEREO_WIDE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_WIDE)
  5820.  
  5821.     #define STATIC_KSNODETYPE_STEREO_ENHANCE\
  5822.         0xAF6878ACL, 0xE83F, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5823.     DEFINE_GUIDSTRUCT("AF6878AC-E83F-11D0-958A-00C04FB925D3", KSNODETYPE_STEREO_ENHANCE);
  5824.     #define KSNODETYPE_STEREO_ENHANCE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_ENHANCE)
  5825.  
  5826.     #define STATIC_KSNODETYPE_REVERB\
  5827.         0xEF0328E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5828.     DEFINE_GUIDSTRUCT("EF0328E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_REVERB);
  5829.     #define KSNODETYPE_REVERB DEFINE_GUIDNAMED(KSNODETYPE_REVERB)
  5830.  
  5831.     #define STATIC_KSNODETYPE_CHORUS\
  5832.         0x20173F20L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5833.     DEFINE_GUIDSTRUCT("20173F20-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_CHORUS);
  5834.     #define KSNODETYPE_CHORUS DEFINE_GUIDNAMED(KSNODETYPE_CHORUS)
  5835.  
  5836.     #define STATIC_KSNODETYPE_3D_EFFECTS\
  5837.         0x55515860L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5838.     DEFINE_GUIDSTRUCT("55515860-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_3D_EFFECTS);
  5839.     #define KSNODETYPE_3D_EFFECTS DEFINE_GUIDNAMED(KSNODETYPE_3D_EFFECTS)
  5840.  
  5841.     #define STATIC_KSNODETYPE_ACOUSTIC_ECHO_CANCEL STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL
  5842.     #define KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSCATEGORY_ACOUSTIC_ECHO_CANCEL
  5843.  
  5844.     #define STATIC_KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
  5845.     #define KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
  5846.  
  5847.     #define STATIC_KSNODETYPE_DEV_SPECIFIC\
  5848.         0x941C7AC0L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  5849.     DEFINE_GUIDSTRUCT("941C7AC0-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DEV_SPECIFIC);
  5850.     #define KSNODETYPE_DEV_SPECIFIC DEFINE_GUIDNAMED(KSNODETYPE_DEV_SPECIFIC)
  5851.  
  5852.     #define STATIC_KSNODETYPE_SURROUND_ENCODER\
  5853.         0x8074C5B2L, 0x3C66, 0x11D2, 0xB4, 0x5A, 0x30, 0x78, 0x30, 0x2C, 0x20, 0x30
  5854.     DEFINE_GUIDSTRUCT("8074C5B2-3C66-11D2-B45A-3078302C2030", KSNODETYPE_SURROUND_ENCODER);
  5855.     #define KSNODETYPE_SURROUND_ENCODER DEFINE_GUIDNAMED(KSNODETYPE_SURROUND_ENCODER)
  5856.  
  5857.     #define STATIC_KSNODETYPE_PEAKMETER\
  5858.         0xa085651eL, 0x5f0d, 0x4b36, 0xa8, 0x69, 0xd1, 0x95, 0xd6, 0xab, 0x4b, 0x9e
  5859.     DEFINE_GUIDSTRUCT("A085651E-5F0D-4b36-A869-D195D6AB4B9E", KSNODETYPE_PEAKMETER);
  5860.     #define KSNODETYPE_PEAKMETER DEFINE_GUIDNAMED(KSNODETYPE_PEAKMETER)
  5861.  
  5862.     //===========================================================================
  5863.     // Topology Node Name GUIDs for common audio nodes
  5864.     #define STATIC_KSAUDFNAME_BASS\
  5865.         0x185FEDE0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5866.     DEFINE_GUIDSTRUCT("185FEDE0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_BASS);
  5867.     #define KSAUDFNAME_BASS DEFINE_GUIDNAMED(KSAUDFNAME_BASS)
  5868.  
  5869.     #define STATIC_KSAUDFNAME_TREBLE\
  5870.         0x185FEDE1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5871.     DEFINE_GUIDSTRUCT("185FEDE1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_TREBLE);
  5872.     #define KSAUDFNAME_TREBLE DEFINE_GUIDNAMED(KSAUDFNAME_TREBLE)
  5873.  
  5874.     #define STATIC_KSAUDFNAME_3D_STEREO\
  5875.         0x185FEDE2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5876.     DEFINE_GUIDSTRUCT("185FEDE2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_3D_STEREO);
  5877.     #define KSAUDFNAME_3D_STEREO DEFINE_GUIDNAMED(KSAUDFNAME_3D_STEREO)
  5878.  
  5879.     #define STATIC_KSAUDFNAME_MASTER_VOLUME\
  5880.         0x185FEDE3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5881.     DEFINE_GUIDSTRUCT("185FEDE3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_VOLUME);
  5882.     #define KSAUDFNAME_MASTER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_VOLUME)
  5883.  
  5884.     #define STATIC_KSAUDFNAME_MASTER_MUTE\
  5885.         0x185FEDE4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5886.     DEFINE_GUIDSTRUCT("185FEDE4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_MUTE);
  5887.     #define KSAUDFNAME_MASTER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_MUTE)
  5888.  
  5889.     #define STATIC_KSAUDFNAME_WAVE_VOLUME\
  5890.         0x185FEDE5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5891.     DEFINE_GUIDSTRUCT("185FEDE5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_VOLUME);
  5892.     #define KSAUDFNAME_WAVE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_VOLUME)
  5893.  
  5894.     #define STATIC_KSAUDFNAME_WAVE_MUTE\
  5895.         0x185FEDE6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5896.     DEFINE_GUIDSTRUCT("185FEDE6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_MUTE);
  5897.     #define KSAUDFNAME_WAVE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_MUTE)
  5898.  
  5899.     #define STATIC_KSAUDFNAME_MIDI_VOLUME\
  5900.         0x185FEDE7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5901.     DEFINE_GUIDSTRUCT("185FEDE7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_VOLUME);
  5902.     #define KSAUDFNAME_MIDI_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_VOLUME)
  5903.  
  5904.     #define STATIC_KSAUDFNAME_MIDI_MUTE\
  5905.         0x185FEDE8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5906.     DEFINE_GUIDSTRUCT("185FEDE8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_MUTE);
  5907.     #define KSAUDFNAME_MIDI_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_MUTE)
  5908.  
  5909.     #define STATIC_KSAUDFNAME_CD_VOLUME\
  5910.         0x185FEDE9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5911.     DEFINE_GUIDSTRUCT("185FEDE9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_VOLUME);
  5912.     #define KSAUDFNAME_CD_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_VOLUME)
  5913.  
  5914.     #define STATIC_KSAUDFNAME_CD_MUTE\
  5915.         0x185FEDEAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5916.     DEFINE_GUIDSTRUCT("185FEDEA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_MUTE);
  5917.     #define KSAUDFNAME_CD_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_CD_MUTE)
  5918.  
  5919.     #define STATIC_KSAUDFNAME_LINE_VOLUME\
  5920.         0x185FEDEBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5921.     DEFINE_GUIDSTRUCT("185FEDEB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_VOLUME);
  5922.     #define KSAUDFNAME_LINE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_VOLUME)
  5923.  
  5924.     #define STATIC_KSAUDFNAME_LINE_MUTE\
  5925.         0x185FEDECL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5926.     DEFINE_GUIDSTRUCT("185FEDEC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_MUTE);
  5927.     #define KSAUDFNAME_LINE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_LINE_MUTE)
  5928.  
  5929.     #define STATIC_KSAUDFNAME_MIC_VOLUME\
  5930.         0x185FEDEDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5931.     DEFINE_GUIDSTRUCT("185FEDED-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_VOLUME);
  5932.     #define KSAUDFNAME_MIC_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_VOLUME)
  5933.  
  5934.     #define STATIC_KSAUDFNAME_MIC_MUTE\
  5935.         0x185FEDEEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5936.     DEFINE_GUIDSTRUCT("185FEDEE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_MUTE);
  5937.     #define KSAUDFNAME_MIC_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIC_MUTE)
  5938.  
  5939.     #define STATIC_KSAUDFNAME_RECORDING_SOURCE\
  5940.         0x185FEDEFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5941.     DEFINE_GUIDSTRUCT("185FEDEF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_SOURCE);
  5942.     #define KSAUDFNAME_RECORDING_SOURCE DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_SOURCE)
  5943.  
  5944.     #define STATIC_KSAUDFNAME_PC_SPEAKER_VOLUME\
  5945.         0x185FEDF0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5946.     DEFINE_GUIDSTRUCT("185FEDF0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_VOLUME);
  5947.     #define KSAUDFNAME_PC_SPEAKER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_VOLUME)
  5948.  
  5949.     #define STATIC_KSAUDFNAME_PC_SPEAKER_MUTE\
  5950.         0x185FEDF1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5951.     DEFINE_GUIDSTRUCT("185FEDF1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_MUTE);
  5952.     #define KSAUDFNAME_PC_SPEAKER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_MUTE)
  5953.  
  5954.     #define STATIC_KSAUDFNAME_MIDI_IN_VOLUME\
  5955.         0x185FEDF2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5956.     DEFINE_GUIDSTRUCT("185FEDF2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_IN_VOLUME);
  5957.     #define KSAUDFNAME_MIDI_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_IN_VOLUME)
  5958.  
  5959.     #define STATIC_KSAUDFNAME_CD_IN_VOLUME\
  5960.         0x185FEDF3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5961.     DEFINE_GUIDSTRUCT("185FEDF3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_IN_VOLUME);
  5962.     #define KSAUDFNAME_CD_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_IN_VOLUME)
  5963.  
  5964.     #define STATIC_KSAUDFNAME_LINE_IN_VOLUME\
  5965.         0x185FEDF4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5966.     DEFINE_GUIDSTRUCT("185FEDF4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN_VOLUME);
  5967.     #define KSAUDFNAME_LINE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN_VOLUME)
  5968.  
  5969.     #define STATIC_KSAUDFNAME_MIC_IN_VOLUME\
  5970.         0x185FEDF5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5971.     DEFINE_GUIDSTRUCT("185FEDF5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_IN_VOLUME);
  5972.     #define KSAUDFNAME_MIC_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_IN_VOLUME)
  5973.  
  5974.     #define STATIC_KSAUDFNAME_WAVE_IN_VOLUME\
  5975.         0x185FEDF6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5976.     DEFINE_GUIDSTRUCT("185FEDF6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_IN_VOLUME);
  5977.     #define KSAUDFNAME_WAVE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_IN_VOLUME)
  5978.  
  5979.     #define STATIC_KSAUDFNAME_VOLUME_CONTROL\
  5980.         0x185FEDF7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5981.     DEFINE_GUIDSTRUCT("185FEDF7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_VOLUME_CONTROL);
  5982.     #define KSAUDFNAME_VOLUME_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_VOLUME_CONTROL)
  5983.  
  5984.     #define STATIC_KSAUDFNAME_MIDI\
  5985.         0x185FEDF8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5986.     DEFINE_GUIDSTRUCT("185FEDF8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI);
  5987.     #define KSAUDFNAME_MIDI DEFINE_GUIDNAMED(KSAUDFNAME_MIDI)
  5988.  
  5989.     #define STATIC_KSAUDFNAME_LINE_IN\
  5990.         0x185FEDF9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5991.     DEFINE_GUIDSTRUCT("185FEDF9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN);
  5992.     #define KSAUDFNAME_LINE_IN DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN)
  5993.  
  5994.     #define STATIC_KSAUDFNAME_RECORDING_CONTROL\
  5995.         0x185FEDFAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  5996.     DEFINE_GUIDSTRUCT("185FEDFA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_CONTROL);
  5997.     #define KSAUDFNAME_RECORDING_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_CONTROL)
  5998.  
  5999.     #define STATIC_KSAUDFNAME_CD_AUDIO\
  6000.         0x185FEDFBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6001.     DEFINE_GUIDSTRUCT("185FEDFB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_AUDIO);
  6002.     #define KSAUDFNAME_CD_AUDIO DEFINE_GUIDNAMED(KSAUDFNAME_CD_AUDIO)
  6003.  
  6004.     #define STATIC_KSAUDFNAME_AUX_VOLUME\
  6005.         0x185FEDFCL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6006.     DEFINE_GUIDSTRUCT("185FEDFC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_VOLUME);
  6007.     #define KSAUDFNAME_AUX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_AUX_VOLUME)
  6008.  
  6009.     #define STATIC_KSAUDFNAME_AUX_MUTE\
  6010.         0x185FEDFDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6011.     DEFINE_GUIDSTRUCT("185FEDFD-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_MUTE);
  6012.     #define KSAUDFNAME_AUX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_AUX_MUTE)
  6013.  
  6014.     #define STATIC_KSAUDFNAME_AUX\
  6015.         0x185FEDFEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6016.     DEFINE_GUIDSTRUCT("185FEDFE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX);
  6017.     #define KSAUDFNAME_AUX DEFINE_GUIDNAMED(KSAUDFNAME_AUX)
  6018.  
  6019.     #define STATIC_KSAUDFNAME_PC_SPEAKER\
  6020.         0x185FEDFFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6021.     DEFINE_GUIDSTRUCT("185FEDFF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER);
  6022.     #define KSAUDFNAME_PC_SPEAKER DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER)
  6023.  
  6024.     #define STATIC_KSAUDFNAME_WAVE_OUT_MIX\
  6025.         0x185FEE00L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6026.     DEFINE_GUIDSTRUCT("185FEE00-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_OUT_MIX);
  6027.     #define KSAUDFNAME_WAVE_OUT_MIX DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_OUT_MIX)
  6028.  
  6029.     #define STATIC_KSAUDFNAME_MONO_OUT\
  6030.         0xf9b41dc3L, 0x96e2, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6031.     DEFINE_GUIDSTRUCT("F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT);
  6032.     #define KSAUDFNAME_MONO_OUT DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT)
  6033.  
  6034.     #define STATIC_KSAUDFNAME_STEREO_MIX\
  6035.         0xdff077L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6036.     DEFINE_GUIDSTRUCT("00DFF077-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX);
  6037.     #define KSAUDFNAME_STEREO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX)
  6038.  
  6039.     #define STATIC_KSAUDFNAME_MONO_MIX\
  6040.         0xdff078L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6041.     DEFINE_GUIDSTRUCT("00DFF078-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX);
  6042.     #define KSAUDFNAME_MONO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX)
  6043.  
  6044.     #define STATIC_KSAUDFNAME_MONO_OUT_VOLUME\
  6045.         0x1ad247ebL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6046.     DEFINE_GUIDSTRUCT("1AD247EB-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_VOLUME);
  6047.     #define KSAUDFNAME_MONO_OUT_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_VOLUME)
  6048.  
  6049.     #define STATIC_KSAUDFNAME_MONO_OUT_MUTE\
  6050.         0x1ad247ecL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6051.     DEFINE_GUIDSTRUCT("1AD247EC-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_MUTE);
  6052.     #define KSAUDFNAME_MONO_OUT_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_MUTE)
  6053.  
  6054.     #define STATIC_KSAUDFNAME_STEREO_MIX_VOLUME\
  6055.         0x1ad247edL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6056.     DEFINE_GUIDSTRUCT("1AD247ED-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_VOLUME);
  6057.     #define KSAUDFNAME_STEREO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_VOLUME)
  6058.  
  6059.     #define STATIC_KSAUDFNAME_STEREO_MIX_MUTE\
  6060.         0x22b0eafdL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6061.     DEFINE_GUIDSTRUCT("22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_MUTE);
  6062.     #define KSAUDFNAME_STEREO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_MUTE)
  6063.  
  6064.     #define STATIC_KSAUDFNAME_MONO_MIX_VOLUME\
  6065.         0x22b0eafeL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6066.     DEFINE_GUIDSTRUCT("22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_VOLUME);
  6067.     #define KSAUDFNAME_MONO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_VOLUME)
  6068.  
  6069.     #define STATIC_KSAUDFNAME_MONO_MIX_MUTE\
  6070.         0x2bc31d69L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6071.     DEFINE_GUIDSTRUCT("2BC31D69-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_MUTE);
  6072.     #define KSAUDFNAME_MONO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_MUTE)
  6073.  
  6074.     #define STATIC_KSAUDFNAME_MICROPHONE_BOOST\
  6075.         0x2bc31d6aL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6076.     DEFINE_GUIDSTRUCT("2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MICROPHONE_BOOST);
  6077.     #define KSAUDFNAME_MICROPHONE_BOOST DEFINE_GUIDNAMED(KSAUDFNAME_MICROPHONE_BOOST)
  6078.  
  6079.     #define STATIC_KSAUDFNAME_ALTERNATE_MICROPHONE\
  6080.         0x2bc31d6bL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6081.     DEFINE_GUIDSTRUCT("2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_ALTERNATE_MICROPHONE);
  6082.     #define KSAUDFNAME_ALTERNATE_MICROPHONE DEFINE_GUIDNAMED(KSAUDFNAME_ALTERNATE_MICROPHONE)
  6083.  
  6084.     #define STATIC_KSAUDFNAME_3D_DEPTH\
  6085.         0x63ff5747L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6086.     DEFINE_GUIDSTRUCT("63FF5747-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_DEPTH);
  6087.     #define KSAUDFNAME_3D_DEPTH DEFINE_GUIDNAMED(KSAUDFNAME_3D_DEPTH)
  6088.  
  6089.     #define STATIC_KSAUDFNAME_3D_CENTER\
  6090.         0x9f0670b4L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6091.     DEFINE_GUIDSTRUCT("9F0670B4-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_CENTER);
  6092.     #define KSAUDFNAME_3D_CENTER DEFINE_GUIDNAMED(KSAUDFNAME_3D_CENTER)
  6093.  
  6094.     #define STATIC_KSAUDFNAME_VIDEO_VOLUME\
  6095.         0x9b46e708L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6096.     DEFINE_GUIDSTRUCT("9B46E708-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_VOLUME);
  6097.     #define KSAUDFNAME_VIDEO_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_VOLUME)
  6098.  
  6099.     #define STATIC_KSAUDFNAME_VIDEO_MUTE\
  6100.         0x9b46e709L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6101.     DEFINE_GUIDSTRUCT("9B46E709-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_MUTE);
  6102.     #define KSAUDFNAME_VIDEO_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_MUTE)
  6103.  
  6104.     #define STATIC_KSAUDFNAME_VIDEO\
  6105.         0x915daec4L, 0xa434, 0x11d2, 0xac, 0x52, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  6106.     DEFINE_GUIDSTRUCT("915DAEC4-A434-11d2-AC52-00C04F8EFB68", KSAUDFNAME_VIDEO);
  6107.     #define KSAUDFNAME_VIDEO DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO)
  6108.  
  6109.     #define STATIC_KSAUDFNAME_PEAKMETER\
  6110.         0x57e24340L, 0xfc5b, 0x4612, 0xa5, 0x62, 0x72, 0xb1, 0x1a, 0x29, 0xdf, 0xae
  6111.     DEFINE_GUIDSTRUCT("57E24340-FC5B-4612-A562-72B11A29DFAE", KSAUDFNAME_PEAKMETER);
  6112.     #define KSAUDFNAME_PEAKMETER DEFINE_GUIDNAMED(KSAUDFNAME_PEAKMETER)
  6113.  
  6114.     // Internal topology node pin definitions
  6115.  
  6116.     #define KSNODEPIN_STANDARD_IN       1
  6117.     #define KSNODEPIN_STANDARD_OUT      0
  6118.  
  6119.     #define KSNODEPIN_SUM_MUX_IN        1   // can be >= 1
  6120.     #define KSNODEPIN_SUM_MUX_OUT       0
  6121.  
  6122.     #define KSNODEPIN_DEMUX_IN          0
  6123.     #define KSNODEPIN_DEMUX_OUT         1   // can be >= 1
  6124.  
  6125.     #define KSNODEPIN_AEC_RENDER_IN     1
  6126.     #define KSNODEPIN_AEC_RENDER_OUT    0
  6127.     #define KSNODEPIN_AEC_CAPTURE_IN    2
  6128.     #define KSNODEPIN_AEC_CAPTURE_OUT   3
  6129.  
  6130.     //===========================================================================
  6131.     //===========================================================================
  6132.  
  6133.     #define STATIC_KSMETHODSETID_Wavetable\
  6134.         0xDCEF31EBL, 0xD907, 0x11D0, 0x95, 0x83, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6135.     DEFINE_GUIDSTRUCT("DCEF31EB-D907-11D0-9583-00C04FB925D3", KSMETHODSETID_Wavetable);
  6136.     #define KSMETHODSETID_Wavetable DEFINE_GUIDNAMED(KSMETHODSETID_Wavetable)
  6137.  
  6138.     typedef enum {
  6139.         KSMETHOD_WAVETABLE_WAVE_ALLOC,
  6140.         KSMETHOD_WAVETABLE_WAVE_FREE,
  6141.         KSMETHOD_WAVETABLE_WAVE_FIND,
  6142.         KSMETHOD_WAVETABLE_WAVE_WRITE
  6143.     } KSMETHOD_WAVETABLE;
  6144.  
  6145.     typedef struct {
  6146.         KSIDENTIFIER        Identifier;                     // wave identifier
  6147.         ULONG               Size;                           // wave size
  6148.         BOOL                Looped;                         // wave looped flag
  6149.         ULONG               LoopPoint;                      // wave loop point
  6150.         BOOL                InROM;                          // wave InROM flag
  6151.         KSDATAFORMAT        Format;                         // wave format
  6152.     } KSWAVETABLE_WAVE_DESC, *PKSWAVETABLE_WAVE_DESC;
  6153.  
  6154.  
  6155.     //===========================================================================
  6156.     //===========================================================================
  6157.  
  6158.     /*
  6159.         Property sets and items
  6160.     */
  6161.  
  6162.     //===========================================================================
  6163.     //===========================================================================
  6164.  
  6165.     #define STATIC_KSPROPSETID_Itd3d\
  6166.         0x6429f090L, 0x9fd9, 0x11d0, 0xa7, 0x5b, 0x00, 0xa0, 0xc9, 0x03, 0x65, 0xe3
  6167.     DEFINE_GUIDSTRUCT("6429f090-9fd9-11d0-a75b-00a0c90365e3", KSPROPSETID_Itd3d);
  6168.     #define KSPROPSETID_Itd3d DEFINE_GUIDNAMED(KSPROPSETID_Itd3d)
  6169.  
  6170.     typedef enum {
  6171.         KSPROPERTY_ITD3D_PARAMS = 0
  6172.     } KSPROPERTY_ITD3D;
  6173.  
  6174.     //===========================================================================
  6175.     //===========================================================================
  6176.  
  6177.     #define STATIC_KSPROPSETID_Hrtf3d\
  6178.         0xb66decb0L, 0xa083, 0x11d0, 0x85, 0x1e, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  6179.     DEFINE_GUIDSTRUCT("b66decb0-a083-11d0-851e-00c04fd9baf3", KSPROPSETID_Hrtf3d);
  6180.     #define KSPROPSETID_Hrtf3d DEFINE_GUIDNAMED(KSPROPSETID_Hrtf3d)
  6181.  
  6182.     typedef enum {
  6183.         KSPROPERTY_HRTF3D_PARAMS = 0,
  6184.         KSPROPERTY_HRTF3D_INITIALIZE,
  6185.         KSPROPERTY_HRTF3D_FILTER_FORMAT
  6186.     } KSPROPERTY_HRTF3D;
  6187.  
  6188.  
  6189.     //===========================================================================
  6190.     //===========================================================================
  6191.  
  6192.     #define STATIC_KSPROPSETID_Wave_Queued\
  6193.         0x16a15b10L, 0x16f0, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  6194.     DEFINE_GUIDSTRUCT("16a15b10-16f0-11d0-a195-0020afd156e4", KSPROPSETID_Wave_Queued);
  6195.     #define KSPROPSETID_Wave_Queued DEFINE_GUIDNAMED(KSPROPSETID_Wave_Queued)
  6196.  
  6197.     #define KSPROPERTY_WAVE_QUEUED_POSITION                 0x00000001
  6198.  
  6199.     #define STATIC_KSMETHODSETID_Wave_Queued\
  6200.         0x7432c160L, 0x8827, 0x11cf, 0xa1, 0x02, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  6201.     DEFINE_GUIDSTRUCT("7432c160-8827-11cf-a102-0020afd156e4", KSMETHODSETID_Wave_Queued);
  6202.     #define KSMETHODSETID_Wave_Queued DEFINE_GUIDNAMED(KSMETHODSETID_Wave_Queued)
  6203.  
  6204.     #define KSMETHOD_WAVE_QUEUED_BREAKLOOP                  0x00000001
  6205.  
  6206.     #define STATIC_KSPROPSETID_Wave\
  6207.         0x924e54b0L, 0x630f, 0x11cf, 0xad, 0xa7, 0x08, 0x00, 0x3e, 0x30, 0x49, 0x4a
  6208.     DEFINE_GUIDSTRUCT("924e54b0-630f-11cf-ada7-08003e30494a", KSPROPSETID_Wave);
  6209.     #define KSPROPSETID_Wave DEFINE_GUIDNAMED(KSPROPSETID_Wave)
  6210.  
  6211.     typedef enum {
  6212.         KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES,
  6213.         KSPROPERTY_WAVE_INPUT_CAPABILITIES,
  6214.         KSPROPERTY_WAVE_OUTPUT_CAPABILITIES,
  6215.         KSPROPERTY_WAVE_BUFFER,
  6216.         KSPROPERTY_WAVE_FREQUENCY,
  6217.         KSPROPERTY_WAVE_VOLUME,
  6218.         KSPROPERTY_WAVE_PAN
  6219.     } KSPROPERTY_WAVE;
  6220.  
  6221.     typedef struct {
  6222.         ULONG        ulDeviceType;
  6223.     } KSWAVE_COMPATCAPS, *PKSWAVE_COMPATCAPS;
  6224.  
  6225.     #define KSWAVE_COMPATCAPS_INPUT                 0x00000000
  6226.     #define KSWAVE_COMPATCAPS_OUTPUT                0x00000001
  6227.  
  6228.     typedef struct {
  6229.         ULONG  MaximumChannelsPerConnection;
  6230.         ULONG  MinimumBitsPerSample;
  6231.         ULONG  MaximumBitsPerSample;
  6232.         ULONG  MinimumSampleFrequency;
  6233.         ULONG  MaximumSampleFrequency;
  6234.         ULONG  TotalConnections;
  6235.         ULONG  ActiveConnections;
  6236.     } KSWAVE_INPUT_CAPABILITIES, *PKSWAVE_INPUT_CAPABILITIES;
  6237.  
  6238.     typedef struct {
  6239.         ULONG  MaximumChannelsPerConnection;
  6240.         ULONG  MinimumBitsPerSample;
  6241.         ULONG  MaximumBitsPerSample;
  6242.         ULONG  MinimumSampleFrequency;
  6243.         ULONG  MaximumSampleFrequency;
  6244.         ULONG  TotalConnections;
  6245.         ULONG  StaticConnections;
  6246.         ULONG  StreamingConnections;
  6247.         ULONG  ActiveConnections;
  6248.         ULONG  ActiveStaticConnections;
  6249.         ULONG  ActiveStreamingConnections;
  6250.         ULONG  Total3DConnections;
  6251.         ULONG  Static3DConnections;
  6252.         ULONG  Streaming3DConnections;
  6253.         ULONG  Active3DConnections;
  6254.         ULONG  ActiveStatic3DConnections;
  6255.         ULONG  ActiveStreaming3DConnections;
  6256.         ULONG  TotalSampleMemory;
  6257.         ULONG  FreeSampleMemory;
  6258.         ULONG  LargestFreeContiguousSampleMemory;
  6259.     } KSWAVE_OUTPUT_CAPABILITIES, *PKSWAVE_OUTPUT_CAPABILITIES;
  6260.  
  6261.     typedef struct {
  6262.         LONG  LeftAttenuation;
  6263.         LONG  RightAttenuation;
  6264.     } KSWAVE_VOLUME, *PKSWAVE_VOLUME;
  6265.  
  6266.     #define KSWAVE_BUFFER_ATTRIBUTEF_LOOPING   0x00000001
  6267.     #define KSWAVE_BUFFER_ATTRIBUTEF_STATIC    0x00000002
  6268.  
  6269.     typedef struct {
  6270.         ULONG   Attributes;
  6271.         ULONG   BufferSize;
  6272.         PVOID   BufferAddress;
  6273.     } KSWAVE_BUFFER, *PKSWAVE_BUFFER;
  6274.  
  6275.     //===========================================================================
  6276.     //===========================================================================
  6277.  
  6278.     #define STATIC_KSMUSIC_TECHNOLOGY_PORT\
  6279.         0x86C92E60L, 0x62E8, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6280.     DEFINE_GUIDSTRUCT("86C92E60-62E8-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_PORT);
  6281.     #define KSMUSIC_TECHNOLOGY_PORT DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_PORT)
  6282.  
  6283.     #define STATIC_KSMUSIC_TECHNOLOGY_SQSYNTH\
  6284.         0x0ECF4380L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6285.     DEFINE_GUIDSTRUCT("0ECF4380-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_SQSYNTH);
  6286.     #define KSMUSIC_TECHNOLOGY_SQSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SQSYNTH)
  6287.  
  6288.     #define STATIC_KSMUSIC_TECHNOLOGY_FMSYNTH\
  6289.         0x252C5C80L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6290.     DEFINE_GUIDSTRUCT("252C5C80-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_FMSYNTH);
  6291.     #define KSMUSIC_TECHNOLOGY_FMSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_FMSYNTH)
  6292.  
  6293.     #define STATIC_KSMUSIC_TECHNOLOGY_WAVETABLE\
  6294.         0x394EC7C0L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6295.     DEFINE_GUIDSTRUCT("394EC7C0-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_WAVETABLE);
  6296.     #define KSMUSIC_TECHNOLOGY_WAVETABLE DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_WAVETABLE)
  6297.  
  6298.     #define STATIC_KSMUSIC_TECHNOLOGY_SWSYNTH\
  6299.         0x37407736L, 0x3620, 0x11D1, 0x85, 0xD3, 0x00, 0x00, 0xF8, 0x75, 0x43, 0x80
  6300.     DEFINE_GUIDSTRUCT("37407736-3620-11D1-85D3-0000F8754380", KSMUSIC_TECHNOLOGY_SWSYNTH);
  6301.     #define KSMUSIC_TECHNOLOGY_SWSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SWSYNTH)
  6302.  
  6303.     #define STATIC_KSPROPSETID_WaveTable\
  6304.         0x8539E660L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6305.     DEFINE_GUIDSTRUCT("8539E660-62E9-11CF-A5D6-28DB04C10000", KSPROPSETID_WaveTable);
  6306.     #define KSPROPSETID_WaveTable DEFINE_GUIDNAMED(KSPROPSETID_WaveTable)
  6307.  
  6308.     typedef enum {
  6309.         KSPROPERTY_WAVETABLE_LOAD_SAMPLE,
  6310.         KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE,
  6311.         KSPROPERTY_WAVETABLE_MEMORY,
  6312.         KSPROPERTY_WAVETABLE_VERSION
  6313.     } KSPROPERTY_WAVETABLE;
  6314.  
  6315.     typedef struct {
  6316.        KSDATARANGE              DataRange;
  6317.        GUID                     Technology;
  6318.        ULONG                    Channels;
  6319.        ULONG                    Notes;
  6320.        ULONG                    ChannelMask;
  6321.     } KSDATARANGE_MUSIC, *PKSDATARANGE_MUSIC;
  6322.  
  6323.     //===========================================================================
  6324.  
  6325.     #define STATIC_KSEVENTSETID_Cyclic\
  6326.         0x142C1AC0L, 0x072A, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6327.     DEFINE_GUIDSTRUCT("142C1AC0-072A-11D0-A5D6-28DB04C10000", KSEVENTSETID_Cyclic);
  6328.     #define KSEVENTSETID_Cyclic DEFINE_GUIDNAMED(KSEVENTSETID_Cyclic)
  6329.  
  6330.     typedef enum {
  6331.         KSEVENT_CYCLIC_TIME_INTERVAL,
  6332.     } KSEVENT_CYCLIC_TIME;
  6333.  
  6334.     #define STATIC_KSPROPSETID_Cyclic\
  6335.         0x3FFEAEA0L, 0x2BEE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6336.     DEFINE_GUIDSTRUCT("3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000", KSPROPSETID_Cyclic);
  6337.     #define KSPROPSETID_Cyclic DEFINE_GUIDNAMED(KSPROPSETID_Cyclic)
  6338.  
  6339.     typedef enum {
  6340.         KSPROPERTY_CYCLIC_POSITION,
  6341.     } KSPROPERTY_CYCLIC;
  6342.  
  6343.     //===========================================================================
  6344.     #define STATIC_KSEVENTSETID_AudioControlChange\
  6345.         0xE85E9698L, 0xFA2F, 0x11D1, 0x95, 0xBD, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  6346.     DEFINE_GUIDSTRUCT("E85E9698-FA2F-11D1-95BD-00C04FB925D3", KSEVENTSETID_AudioControlChange);
  6347.     #define KSEVENTSETID_AudioControlChange DEFINE_GUIDNAMED(KSEVENTSETID_AudioControlChange)
  6348.  
  6349.     typedef enum {
  6350.         KSEVENT_CONTROL_CHANGE,
  6351.     } KSEVENT_AUDIO_CONTROL_CHANGE;
  6352.  
  6353.     //===========================================================================
  6354.  
  6355.     #define STATIC_KSEVENTSETID_LoopedStreaming\
  6356.         0x4682B940L, 0xC6EF, 0x11D0, 0x96, 0xD8, 0x00, 0xAA, 0x00, 0x51, 0xE5, 0x1D
  6357.     DEFINE_GUIDSTRUCT("4682B940-C6EF-11D0-96D8-00AA0051E51D", KSEVENTSETID_LoopedStreaming);
  6358.     #define KSEVENTSETID_LoopedStreaming DEFINE_GUIDNAMED(KSEVENTSETID_LoopedStreaming)
  6359.  
  6360.     typedef enum {
  6361.         KSEVENT_LOOPEDSTREAMING_POSITION,
  6362.     } KSEVENT_LOOPEDSTREAMING;
  6363.  
  6364.     typedef struct {
  6365.         KSEVENTDATA KsEventData;
  6366.     #if defined(_NTDDK_)
  6367.         ULONGLONG   Position;
  6368.     #else // !_NTDDK_
  6369.         DWORDLONG   Position;
  6370.     #endif // !_NTDDK_
  6371.     } LOOPEDSTREAMING_POSITION_EVENT_DATA, *PLOOPEDSTREAMING_POSITION_EVENT_DATA ;
  6372.  
  6373.     #define STATIC_KSEVENTSETID_Sysaudio \
  6374.         0x04800320L, 0x4491, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
  6375.     DEFINE_GUIDSTRUCT("04800320-4491-11D1-A050-405705C10000", KSEVENTSETID_Sysaudio);
  6376.     #define KSEVENTSETID_Sysaudio DEFINE_GUIDNAMED(KSEVENTSETID_Sysaudio)
  6377.  
  6378.     typedef enum {
  6379.         KSEVENT_SYSAUDIO_ADDREMOVE_DEVICE,
  6380.         KSEVENT_SYSAUDIO_CHANGE_DEVICE
  6381.     } KSEVENT_SYSAUDIO;
  6382.  
  6383.     #define STATIC_KSPROPSETID_Sysaudio\
  6384.         0xCBE3FAA0L, 0xCC75, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
  6385.     DEFINE_GUIDSTRUCT("CBE3FAA0-CC75-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio);
  6386.     #define KSPROPSETID_Sysaudio DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio)
  6387.  
  6388.     typedef enum {
  6389.         KSPROPERTY_SYSAUDIO_DEVICE_COUNT = 1,
  6390.         KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME,
  6391.         KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE,
  6392.         KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME,
  6393.         KSPROPERTY_SYSAUDIO_SELECT_GRAPH,
  6394.         KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE,
  6395.         KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT,
  6396.         KSPROPERTY_SYSAUDIO_ALWAYS_CREATE_VIRTUAL_SOURCE,
  6397.         KSPROPERTY_SYSAUDIO_ADDREMOVE_LOCK,
  6398.         KSPROPERTY_SYSAUDIO_ADDREMOVE_UNLOCK,
  6399.         KSPROPERTY_SYSAUDIO_RENDER_PIN_INSTANCES,
  6400.         KSPROPERTY_SYSAUDIO_RENDER_CONNECTION_INDEX,
  6401.         KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE_ONLY,
  6402.         KSPROPERTY_SYSAUDIO_INSTANCE_INFO,
  6403.         KSPROPERTY_SYSAUDIO_PREFERRED_DEVICE
  6404.     } KSPROPERTY_SYSAUDIO;
  6405.  
  6406.     typedef struct {
  6407.         KSPROPERTY Property;
  6408.         GUID PinCategory;
  6409.         GUID PinName;
  6410.     } SYSAUDIO_CREATE_VIRTUAL_SOURCE, *PSYSAUDIO_CREATE_VIRTUAL_SOURCE;
  6411.  
  6412.     typedef struct {
  6413.         KSPROPERTY Property;
  6414.         ULONG PinId;
  6415.         ULONG NodeId;
  6416.         ULONG Flags;
  6417.         ULONG Reserved;
  6418.     } SYSAUDIO_SELECT_GRAPH, *PSYSAUDIO_SELECT_GRAPH;
  6419.  
  6420.     typedef struct {
  6421.         KSPROPERTY Property;
  6422.         ULONG Flags;
  6423.         ULONG DeviceNumber;
  6424.     } SYSAUDIO_INSTANCE_INFO, *PSYSAUDIO_INSTANCE_INFO;
  6425.  
  6426.     #define SYSAUDIO_FLAGS_DONT_COMBINE_PINS        0x00000001
  6427.  
  6428.     typedef struct {
  6429.         KSPROPERTY Property;
  6430.         ULONG Flags;
  6431.         ULONG Index;            // KSPROPERTY_SYSAUDIO_DEFAULT_TYPE
  6432.     } SYSAUDIO_PREFERRED_DEVICE, *PSYSAUDIO_PREFERRED_DEVICE;
  6433.  
  6434.     #define SYSAUDIO_FLAGS_CLEAR_PREFERRED          0x00000002
  6435.  
  6436.     typedef enum {              // preferred device index
  6437.         KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT = 0,
  6438.         KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT,
  6439.         KSPROPERTY_SYSAUDIO_RECORD_DEFAULT,
  6440.         KSPROPERTY_SYSAUDIO_MIDI_DEFAULT,
  6441.         KSPROPERTY_SYSAUDIO_MIXER_DEFAULT
  6442.     } KSPROPERTY_SYSAUDIO_DEFAULT_TYPE;
  6443.  
  6444.     #define STATIC_KSPROPSETID_Sysaudio_Pin \
  6445.         0xA3A53220L, 0xC6E4, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
  6446.     DEFINE_GUIDSTRUCT("A3A53220-C6E4-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio_Pin);
  6447.     #define KSPROPSETID_Sysaudio_Pin DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio_Pin)
  6448.  
  6449.     typedef enum {
  6450.         KSPROPERTY_SYSAUDIO_TOPOLOGY_CONNECTION_INDEX,
  6451.         KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE,
  6452.         KSPROPERTY_SYSAUDIO_PIN_VOLUME_NODE
  6453.     } KSPROPERTY_SYSAUDIO_PIN;
  6454.  
  6455.     typedef struct {
  6456.         KSPROPERTY  Property;
  6457.         ULONG       MixerPinId;
  6458.         ULONG       Reserved;
  6459.     } SYSAUDIO_ATTACH_VIRTUAL_SOURCE, *PSYSAUDIO_ATTACH_VIRTUAL_SOURCE;
  6460.  
  6461.     typedef struct {
  6462.         KSPROPERTY  Property;
  6463.         ULONG       NodeId;
  6464.         ULONG       Reserved;
  6465.     } KSNODEPROPERTY, *PKSNODEPROPERTY;
  6466.  
  6467.     typedef struct {
  6468.         KSNODEPROPERTY NodeProperty;
  6469.         LONG           Channel;                   // value to get or set
  6470.         ULONG          Reserved;
  6471.     } KSNODEPROPERTY_AUDIO_CHANNEL, *PKSNODEPROPERTY_AUDIO_CHANNEL;
  6472.  
  6473.     typedef struct {
  6474.         KSNODEPROPERTY NodeProperty;
  6475.         ULONG   DevSpecificId;
  6476.         ULONG   DeviceInfo;
  6477.         ULONG   Length;
  6478.     } KSNODEPROPERTY_AUDIO_DEV_SPECIFIC, *PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC;
  6479.  
  6480.     typedef struct {
  6481.         KSNODEPROPERTY   NodeProperty;
  6482.         PVOID            ListenerId;
  6483.     #ifndef _WIN64
  6484.         ULONG            Reserved;
  6485.     #endif // _WIN64
  6486.     } KSNODEPROPERTY_AUDIO_3D_LISTENER, *PKSNODEPROPERTY_AUDIO_3D_LISTENER;
  6487.  
  6488.     typedef struct {
  6489.         KSNODEPROPERTY   NodeProperty;
  6490.         PVOID            AppContext;
  6491.         ULONG            Length;
  6492.     #ifndef _WIN64
  6493.         ULONG            Reserved;
  6494.     #endif // _WIN64
  6495.     } KSNODEPROPERTY_AUDIO_PROPERTY, *PKSNODEPROPERTY_AUDIO_PROPERTY;
  6496.  
  6497.     //===========================================================================
  6498.  
  6499.     #define STATIC_KSPROPSETID_Linear\
  6500.         0x5A2FFE80L, 0x16B9, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6501.     DEFINE_GUIDSTRUCT("5A2FFE80-16B9-11D0-A5D6-28DB04C10000", KSPROPSETID_Linear);
  6502.     #define KSPROPSETID_Linear DEFINE_GUIDNAMED(KSPROPSETID_Linear)
  6503.  
  6504.     typedef enum {
  6505.         KSPROPERTY_LINEAR_POSITION,
  6506.     } KSPROPERTY_LINEAR;
  6507.  
  6508.     //===========================================================================
  6509.  
  6510.     //
  6511.     // Midi definitions
  6512.     //
  6513.  
  6514.     /*
  6515.         Formats
  6516.     */
  6517.  
  6518.     #define STATIC_KSDATAFORMAT_TYPE_MUSIC\
  6519.         0xE725D360L, 0x62CC, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6520.     DEFINE_GUIDSTRUCT("E725D360-62CC-11CF-A5D6-28DB04C10000", KSDATAFORMAT_TYPE_MUSIC);
  6521.     #define KSDATAFORMAT_TYPE_MUSIC DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MUSIC)
  6522.  
  6523.     // 'mids' == MEDIATYPE_Midi
  6524.     #define STATIC_KSDATAFORMAT_TYPE_MIDI\
  6525.         0x7364696DL, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  6526.     DEFINE_GUIDSTRUCT("7364696D-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_MIDI);
  6527.     #define KSDATAFORMAT_TYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MIDI)
  6528.  
  6529.     #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI\
  6530.         0x1D262760L, 0xE957, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6531.     DEFINE_GUIDSTRUCT("1D262760-E957-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI);
  6532.     #define KSDATAFORMAT_SUBTYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI)
  6533.  
  6534.     #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI_BUS\
  6535.         0x2CA15FA0L, 0x6CFE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  6536.     DEFINE_GUIDSTRUCT("2CA15FA0-6CFE-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI_BUS);
  6537.     #define KSDATAFORMAT_SUBTYPE_MIDI_BUS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI_BUS)
  6538.  
  6539.     #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFMIDI\
  6540.         0x4995DAF0L, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  6541.     DEFINE_GUIDSTRUCT("4995DAF0-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFFMIDI);
  6542.     #define KSDATAFORMAT_SUBTYPE_RIFFMIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFMIDI)
  6543.  
  6544.     /*
  6545.         KSDATAFORMAT_SUBTYPE_DIRECTMUSIC
  6546.         see DMusicKS.h
  6547.     */
  6548.  
  6549.     // WARNING! This structure MUST be dword aligned
  6550.     // regardless of the number of data bytes.
  6551.  
  6552.     typedef struct {
  6553.         ULONG   TimeDeltaMs;        // Delta Milliseconds from the previous midiformat
  6554.                                     // in the packet. The first midiformat in the packet
  6555.                                     // is a delta from the PTS in the KSSTREAM_HEADER.
  6556.         ULONG   ByteCount;          // Number of bytes of data that follow this struct.
  6557.     } KSMUSICFORMAT, *PKSMUSICFORMAT;
  6558.  
  6559.     //
  6560.     // This entire set of MPEG Standard/Dialect Guids are obsolete. Do not use them.
  6561.     //
  6562.     //====================================================================================================
  6563.     //====================================================================================================
  6564.     // The following official MPEG Formats, Subtypes and Specifiers are listed as required or optional
  6565.     // These official MPEG GUIDs are the preferred method of supporting MPEG/AC-3 media types in new code.
  6566.     // Older MPEG GUIDs should also be supported for compatibilty, but these new modes are still required.
  6567.     //====================================================================================================
  6568.     //====================================================================================================
  6569.  
  6570.     /*
  6571.     This is a summary of what media types/specifiers will be required for all DVD+DSS+DVB+DTV MPEG decoders.
  6572.     These media types are what the decoder driver must accept, hardware support for all of these media types
  6573.     may or may not actually be provided by the decoder natively.  These media types are intended to define
  6574.     the "officially" supported MPEG/AC-3 media types that all WHQL certified decoders must implement.  This
  6575.     specifically includes driver and/or hardware support for all the required standards and dialects.
  6576.  
  6577.     All MPEG video decoders must support all of the MPEG video modes shown as [required] below.
  6578.     All MPEG audio decoders must support all of the MPEG audio modes shown as [required] below.
  6579.     All AC-3 audio decoders must support all of the AC-3 audio modes shown as [required] below.
  6580.     The line items shown as [optional] need not be implemented, but are possible formats that might be implemented.
  6581.  
  6582.     Note that the input/output pin formats are defined by 2 or 3 GUIDs: TYPE, SUBTYPE, and maybe SPECIFIER.
  6583.     The specifiers are included if the data format is a "dialect" that needs to be differentiated during decoding.
  6584.     The decoder MUST be prepared to deal with ALL requests for _required_ "Standard" formats OR _required_ "Dialects".
  6585.  
  6586.     STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM         [required]
  6587.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [required]
  6588.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  6589.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [required]
  6590.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  6591.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  6592.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  6593.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  6594.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  6595.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  6596.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  6597.     STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET                [required]
  6598.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [optional]
  6599.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  6600.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [optional]
  6601.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  6602.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  6603.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  6604.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  6605.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [required]
  6606.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  6607.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  6608.     STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER               [required]
  6609.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  6610.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  6611.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  6612.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  6613.         STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  6614.             STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  6615.  
  6616.     Note that the SPECIFIER GUIDs normally identify particular versions of MPEG such as DSS and DVD.
  6617.     This approach was taken to minimize the number of DSS/DVB/DVD/DTV etc. media SUBTYPES.
  6618.     These specifiers are currently required to disambiguate MPEG syntax _parsing_ by the decoder
  6619.     using alternate parsing routines or downloadable firmware or hardware decode settings.
  6620.  
  6621.     In the future these specifiers will be extended to cover new KS MPEG flavors such as DVB and DTV.
  6622.     Thus, the optional specifiers will be subject to clarification and/or definition as they are needed.
  6623.  
  6624.     Important note: Per the ITU MPEG specs, MPEG 2 media may contain pure MPEG 1 syntax and
  6625.     any "MPEG 2" PES packets may actually contain MPEG 1 payloads and MPEG 1 syntax.  Some MPEG
  6626.     broadcasts can revert from MPEG2 to MPEG1 format data at their discretion, without warning.
  6627.  
  6628.     CAUTION: Decoders MUST attempt to process MPEG data AS SOON AS POSSIBLE after reception.
  6629.     In particular, elementary MPEG or MPEG PES packet streams should not be aggregated into DVD
  6630.     "pack headers" internally before submission to the codec hardware if AT ALL POSSIBLE.  The
  6631.     reason is that mpeg data may need to be processed immediately but there may be no additional
  6632.     MPEG data forthcoming to fill up the PES packet OR DVD "pack" in a timely fashion.  This is
  6633.     particularly true of MPEG dialects that utilize "repeat field signally" to reuse the last
  6634.     decoded MPEG video field.
  6635.  
  6636.     */
  6637.  
  6638.     /////////////////////////////////////////////////////////////////////////
  6639.     // The major data type GUIDs that define the data packet encapsulation //
  6640.     /////////////////////////////////////////////////////////////////////////
  6641.  
  6642.     // STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM
  6643.     #define STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM \
  6644.         0x36523b11L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6645.     DEFINE_GUIDSTRUCT("36523B11-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM );
  6646.     #define KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM)
  6647.  
  6648.     // STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET
  6649.     #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET \
  6650.         0x36523b12L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6651.     DEFINE_GUIDSTRUCT("36523B12-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PES_PACKET );
  6652.     #define KSDATAFORMAT_TYPE_STANDARD_PES_PACKET DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PES_PACKET)
  6653.  
  6654.     // STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER
  6655.     #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER \
  6656.         0x36523b13L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6657.     DEFINE_GUIDSTRUCT("36523B13-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER );
  6658.     #define KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER)
  6659.  
  6660.     ///////////////////////////////////////////////////////////////////////////////
  6661.     // The minor data subtype GUIDs that define the exact class of the data type.//
  6662.     ///////////////////////////////////////////////////////////////////////////////
  6663.  
  6664.     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO
  6665.     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO \
  6666.         0x36523b21L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6667.     DEFINE_GUIDSTRUCT("36523B21-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO );
  6668.     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO)
  6669.  
  6670.     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO
  6671.     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO \
  6672.         0x36523b22L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6673.     DEFINE_GUIDSTRUCT("36523B22-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO );
  6674.     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO)
  6675.  
  6676.     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO
  6677.     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO \
  6678.         0x36523b23L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6679.     DEFINE_GUIDSTRUCT("36523B23-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO );
  6680.     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO)
  6681.  
  6682.     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO
  6683.     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO \
  6684.         0x36523b24L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6685.     DEFINE_GUIDSTRUCT("36523B24-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO );
  6686.     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO)
  6687.  
  6688.     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO
  6689.     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO \
  6690.         0x36523b25L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6691.     DEFINE_GUIDSTRUCT("36523B25-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO );
  6692.     #define KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO)
  6693.  
  6694.     ///////////////////////////////////////////////////////////////////////////////
  6695.     // The low-level specifier GUIDs that define the flavor of the data subtype. //
  6696.     // Some SUBTYPES, notably MPEG2_VIDEO, MPEG2_AUDIO have different dialects.  //
  6697.     // These specifiers are intended to be accompanied by a specifier structure. //
  6698.     ///////////////////////////////////////////////////////////////////////////////
  6699.  
  6700.     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO
  6701.     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO \
  6702.         0x36523b31L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6703.     DEFINE_GUIDSTRUCT("36523B31-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO );
  6704.     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO)
  6705.  
  6706.     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO
  6707.     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO \
  6708.         0x36523b32L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6709.     DEFINE_GUIDSTRUCT("36523B32-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO );
  6710.     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO)
  6711.  
  6712.     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO    Associated with KS_MPEGVIDEOINFO2 defined later
  6713.     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO \
  6714.         0x36523b33L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6715.     DEFINE_GUIDSTRUCT("36523B33-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO );
  6716.     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO)
  6717.  
  6718.     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO    Associated with KS_MPEGAUDIOINFO defined later
  6719.     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO \
  6720.         0x36523b34L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6721.     DEFINE_GUIDSTRUCT("36523B34-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO );
  6722.     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO)
  6723.  
  6724.     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO
  6725.     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO \
  6726.         0x36523b35L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  6727.     DEFINE_GUIDSTRUCT("36523B35-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO );
  6728.     #define KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO)
  6729.  
  6730.     //====================================================================================================
  6731.     //====================================================================================================
  6732.     //                              *** COMPATIBILITY WARNING ***
  6733.     // The *following* older DSS, MPEG, DVD & AC-3 GUID definitions are retained for backward compability.
  6734.     // These MPEG GUIDs should also be supported for compatibilty, but the above newer modes are still required.
  6735.     //====================================================================================================
  6736.     //====================================================================================================
  6737.  
  6738.     //
  6739.     // DSS definitions
  6740.     //
  6741.  
  6742.     #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_VIDEO\
  6743.         0xa0af4f81L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
  6744.     DEFINE_GUIDSTRUCT("a0af4f81-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_VIDEO);
  6745.     #define KSDATAFORMAT_SUBTYPE_DSS_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_VIDEO)
  6746.  
  6747.     #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_AUDIO\
  6748.         0xa0af4f82L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
  6749.     DEFINE_GUIDSTRUCT("a0af4f82-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_AUDIO);
  6750.     #define KSDATAFORMAT_SUBTYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_AUDIO)
  6751.  
  6752.     //
  6753.     // End of obsolete MPEG definitions.
  6754.     //
  6755.  
  6756.     //
  6757.     // mpeg 1 definitions
  6758.     //
  6759.     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Packet\
  6760.         0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  6761.     DEFINE_GUIDSTRUCT("e436eb80-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Packet);
  6762.     #define KSDATAFORMAT_SUBTYPE_MPEG1Packet DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Packet)
  6763.  
  6764.     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Payload\
  6765.         0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  6766.     DEFINE_GUIDSTRUCT("e436eb81-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Payload);
  6767.     #define KSDATAFORMAT_SUBTYPE_MPEG1Payload DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Payload)
  6768.  
  6769.     // MEDIASUBTYPE_MPEG1Video
  6770.     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Video\
  6771.         0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  6772.     DEFINE_GUIDSTRUCT("e436eb86-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Video);
  6773.     #define KSDATAFORMAT_SUBTYPE_MPEG1Video DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Video)
  6774.  
  6775.     //FORMAT_MPEGVideo
  6776.     #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO\
  6777.         0x05589f82L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  6778.     DEFINE_GUIDSTRUCT("05589f82-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO);
  6779.     #define KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO)
  6780.  
  6781.     //
  6782.     // mpeg 2 definitions
  6783.     //
  6784.     #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PES\
  6785.         0xe06d8020L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6786.     DEFINE_GUIDSTRUCT("e06d8020-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PES);
  6787.     #define KSDATAFORMAT_TYPE_MPEG2_PES DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PES)
  6788.  
  6789.     #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PROGRAM\
  6790.         0xe06d8022L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6791.     DEFINE_GUIDSTRUCT("e06d8022-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PROGRAM);
  6792.     #define KSDATAFORMAT_TYPE_MPEG2_PROGRAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PROGRAM)
  6793.  
  6794.     #define STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT\
  6795.         0xe06d8023L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6796.     DEFINE_GUIDSTRUCT("e06d8023-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_TRANSPORT);
  6797.     #define KSDATAFORMAT_TYPE_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_TRANSPORT)
  6798.  
  6799.     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO\
  6800.         0xe06d8026L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6801.     DEFINE_GUIDSTRUCT("e06d8026-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO);
  6802.     #define KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO)
  6803.  
  6804.     // use MPEGVIDEOINFO2 (defined below) with KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO
  6805.     #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO\
  6806.         0xe06d80e3L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6807.     DEFINE_GUIDSTRUCT("e06d80e3-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO);
  6808.     #define KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO)
  6809.  
  6810.  
  6811.     //
  6812.     // Mpeg2 video properties
  6813.     //
  6814.  
  6815.  
  6816.     #define STATIC_KSPROPSETID_Mpeg2Vid\
  6817.         0xC8E11B60L, 0x0CC9, 0x11D0, 0xBD, 0x69, 0x00, 0x35, 0x05, 0xC1, 0x03, 0xA9
  6818.     DEFINE_GUIDSTRUCT("C8E11B60-0CC9-11D0-BD69-003505C103A9", KSPROPSETID_Mpeg2Vid);
  6819.     #define  KSPROPSETID_Mpeg2Vid DEFINE_GUIDNAMED( KSPROPSETID_Mpeg2Vid )
  6820.  
  6821.  
  6822.     typedef enum {
  6823.         KSPROPERTY_MPEG2VID_MODES,          // available output modes of decoder
  6824.         KSPROPERTY_MPEG2VID_CUR_MODE,       // current mode of the decoder
  6825.         KSPROPERTY_MPEG2VID_4_3_RECT,       // output coordinates for 4:3 source
  6826.         KSPROPERTY_MPEG2VID_16_9_RECT,      // output coordinates for 16:9 source
  6827.         KSPROPERTY_MPEG2VID_16_9_PANSCAN,   // pan and scan vectors
  6828.     } KSPROPERTY_MPEG2VID;
  6829.  
  6830.     //
  6831.     // bit field definitions for MPEG2 VIDEO mode
  6832.     //
  6833.  
  6834.     #define KSMPEGVIDMODE_PANSCAN   0x0001
  6835.     #define KSMPEGVIDMODE_LTRBOX    0x0002
  6836.     #define KSMPEGVIDMODE_SCALE     0x0004
  6837.  
  6838.     //
  6839.     // rectangle definitions for the 4/3 and 16/9 cropping properties of
  6840.     // the MPEG2Video decoder
  6841.     //
  6842.  
  6843.     typedef struct _KSMPEGVID_RECT {
  6844.         ULONG StartX;
  6845.         ULONG StartY;
  6846.         ULONG EndX;
  6847.         ULONG EndY;
  6848.     } KSMPEGVID_RECT, *PKSMPEGVID_RECT;
  6849.  
  6850.     //
  6851.     // Params for pan / scan
  6852.     //
  6853.  
  6854.  
  6855.     //
  6856.     // MPEG2 Audio definition
  6857.     //
  6858.  
  6859.     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO\
  6860.         0xe06d802bL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6861.     DEFINE_GUIDSTRUCT("e06d802b-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO);
  6862.     #define KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO)
  6863.  
  6864.     #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO\
  6865.         0xe06d80e5L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6866.     DEFINE_GUIDSTRUCT("e06d80e5-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO);
  6867.     #define KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO)
  6868.  
  6869.     //
  6870.     // DVD LPCM Audio definition
  6871.     //
  6872.  
  6873.     #define STATIC_KSDATAFORMAT_SUBTYPE_LPCM_AUDIO\
  6874.         0xe06d8032L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6875.     DEFINE_GUIDSTRUCT("e06d8032-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_LPCM_AUDIO);
  6876.     #define KSDATAFORMAT_SUBTYPE_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_LPCM_AUDIO)
  6877.  
  6878.     #define STATIC_KSDATAFORMAT_SPECIFIER_LPCM_AUDIO\
  6879.         0xe06d80e6L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6880.     DEFINE_GUIDSTRUCT("e06d80e6-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_LPCM_AUDIO);
  6881.     #define KSDATAFORMAT_SPECIFIER_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_LPCM_AUDIO)
  6882.  
  6883.     //
  6884.     // AC-3 definition
  6885.     //
  6886.  
  6887.     #define STATIC_KSDATAFORMAT_SUBTYPE_AC3_AUDIO\
  6888.         0xe06d802cL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6889.     DEFINE_GUIDSTRUCT("e06d802c-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_AC3_AUDIO);
  6890.     #define KSDATAFORMAT_SUBTYPE_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_AC3_AUDIO)
  6891.  
  6892.     #define STATIC_KSDATAFORMAT_SPECIFIER_AC3_AUDIO\
  6893.         0xe06d80e4L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6894.     DEFINE_GUIDSTRUCT("e06d80e4-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_AC3_AUDIO);
  6895.     #define KSDATAFORMAT_SPECIFIER_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_AC3_AUDIO)
  6896.  
  6897.     #define STATIC_KSPROPSETID_AC3\
  6898.         0xBFABE720L, 0x6E1F, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  6899.     DEFINE_GUIDSTRUCT("BFABE720-6E1F-11D0-BCF2-444553540000", KSPROPSETID_AC3);
  6900.     #define KSPROPSETID_AC3 DEFINE_GUIDNAMED(KSPROPSETID_AC3)
  6901.  
  6902.     typedef enum {
  6903.         KSPROPERTY_AC3_ERROR_CONCEALMENT = 1,
  6904.         KSPROPERTY_AC3_ALTERNATE_AUDIO,
  6905.         KSPROPERTY_AC3_DOWNMIX,
  6906.         KSPROPERTY_AC3_BIT_STREAM_MODE,
  6907.         KSPROPERTY_AC3_DIALOGUE_LEVEL,
  6908.         KSPROPERTY_AC3_LANGUAGE_CODE,
  6909.         KSPROPERTY_AC3_ROOM_TYPE
  6910.     } KSPROPERTY_AC3;
  6911.  
  6912.     typedef struct  {
  6913.         BOOL        fRepeatPreviousBlock;
  6914.         BOOL        fErrorInCurrentBlock;
  6915.     } KSAC3_ERROR_CONCEALMENT, *PKSAC3_ERROR_CONCEALMENT;
  6916.  
  6917.     typedef struct {
  6918.         BOOL    fStereo;
  6919.         ULONG   DualMode;
  6920.     } KSAC3_ALTERNATE_AUDIO, *PKSAC3_ALTERNATE_AUDIO;
  6921.  
  6922.     #define KSAC3_ALTERNATE_AUDIO_1     1
  6923.     #define KSAC3_ALTERNATE_AUDIO_2     2
  6924.     #define KSAC3_ALTERNATE_AUDIO_BOTH  3
  6925.  
  6926.     typedef struct {
  6927.         BOOL        fDownMix;
  6928.         BOOL        fDolbySurround;
  6929.     } KSAC3_DOWNMIX, *PKSAC3_DOWNMIX;
  6930.  
  6931.     typedef struct {
  6932.         LONG        BitStreamMode;
  6933.     } KSAC3_BIT_STREAM_MODE, *PKSAC3_BIT_STREAM_MODE;
  6934.  
  6935.     #define KSAC3_SERVICE_MAIN_AUDIO            0
  6936.     #define KSAC3_SERVICE_NO_DIALOG             1
  6937.     #define KSAC3_SERVICE_VISUALLY_IMPAIRED     2
  6938.     #define KSAC3_SERVICE_HEARING_IMPAIRED      3
  6939.     #define KSAC3_SERVICE_DIALOG_ONLY           4
  6940.     #define KSAC3_SERVICE_COMMENTARY            5
  6941.     #define KSAC3_SERVICE_EMERGENCY_FLASH       6
  6942.     #define KSAC3_SERVICE_VOICE_OVER            7
  6943.  
  6944.     typedef struct {
  6945.         ULONG   DialogueLevel;
  6946.     } KSAC3_DIALOGUE_LEVEL, *PKSAC3_DIALOGUE_LEVEL;
  6947.  
  6948.     typedef struct {
  6949.         BOOL    fLargeRoom;
  6950.     } KSAC3_ROOM_TYPE, *PKSAC3_ROOM_TYPE;
  6951.  
  6952.  
  6953.     //
  6954.     // DTS and SDDS definitions (media subtype GUIDs)
  6955.     //
  6956.     #define STATIC_KSDATAFORMAT_SUBTYPE_DTS_AUDIO\
  6957.         0xe06d8033L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6958.     DEFINE_GUIDSTRUCT("e06d8033-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_DTS_AUDIO);
  6959.     #define KSDATAFORMAT_SUBTYPE_DTS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DTS_AUDIO)
  6960.  
  6961.     #define STATIC_KSDATAFORMAT_SUBTYPE_SDDS_AUDIO\
  6962.         0xe06d8034L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6963.     DEFINE_GUIDSTRUCT("e06d8034-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_SDDS_AUDIO);
  6964.     #define KSDATAFORMAT_SUBTYPE_SDDS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SDDS_AUDIO)
  6965.  
  6966.  
  6967.     //
  6968.     // audio decoder output properties
  6969.     //
  6970.  
  6971.     #define STATIC_KSPROPSETID_AudioDecoderOut\
  6972.         0x6ca6e020L, 0x43bd, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
  6973.     DEFINE_GUIDSTRUCT("6ca6e020-43bd-11d0-bd6a-003505c103a9", KSPROPSETID_AudioDecoderOut);
  6974.     #define KSPROPSETID_AudioDecoderOut DEFINE_GUIDNAMED(KSPROPSETID_AudioDecoderOut)
  6975.  
  6976.     typedef enum {
  6977.         KSPROPERTY_AUDDECOUT_MODES,         // available output modes of decoder
  6978.         KSPROPERTY_AUDDECOUT_CUR_MODE,      // current mode of the decoder
  6979.     } KSPROPERTY_AUDDECOUT;
  6980.  
  6981.     #define KSAUDDECOUTMODE_STEREO_ANALOG   0x0001
  6982.     #define KSAUDDECOUTMODE_PCM_51          0x0002
  6983.     #define KSAUDDECOUTMODE_SPDIFF          0x0004
  6984.  
  6985.  
  6986.  
  6987.     //
  6988.     // subpicture definition
  6989.     //
  6990.  
  6991.     #define STATIC_KSDATAFORMAT_SUBTYPE_SUBPICTURE\
  6992.         0xe06d802dL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  6993.     DEFINE_GUIDSTRUCT("e06d802d-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_SUBPICTURE);
  6994.     #define KSDATAFORMAT_SUBTYPE_SUBPICTURE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SUBPICTURE)
  6995.  
  6996.  
  6997.     #define STATIC_KSPROPSETID_DvdSubPic\
  6998.         0xac390460L, 0x43af, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
  6999.     DEFINE_GUIDSTRUCT("ac390460-43af-11d0-bd6a-003505c103a9", KSPROPSETID_DvdSubPic);
  7000.     #define KSPROPSETID_DvdSubPic DEFINE_GUIDNAMED(KSPROPSETID_DvdSubPic)
  7001.  
  7002.     typedef enum {
  7003.         KSPROPERTY_DVDSUBPIC_PALETTE,
  7004.         KSPROPERTY_DVDSUBPIC_HLI,
  7005.         KSPROPERTY_DVDSUBPIC_COMPOSIT_ON,  // TRUE for subpicture is displayed
  7006.     } KSPROPERTY_DVDSUBPIC;
  7007.  
  7008.     typedef struct _KS_DVD_YCrCb {
  7009.         UCHAR   Reserved;
  7010.         UCHAR   Y;
  7011.         UCHAR   Cr;
  7012.         UCHAR   Cb;
  7013.     } KS_DVD_YCrCb, *PKS_DVD_YCrCb;
  7014.  
  7015.     /* The KS_DVD_YUV structure is now superseded by KS_DVD_YCrCb above and is
  7016.        here for backward compatibility only */
  7017.  
  7018.     typedef struct _KS_DVD_YUV {
  7019.         UCHAR   Reserved;
  7020.         UCHAR   Y;
  7021.         UCHAR   V;
  7022.         UCHAR   U;
  7023.     } KS_DVD_YUV, *PKS_DVD_YUV;
  7024.  
  7025.     typedef struct _KSPROPERTY_SPPAL {
  7026.         KS_DVD_YUV sppal[16];
  7027.     } KSPROPERTY_SPPAL, *PKSPROPERTY_SPPAL;
  7028.  
  7029.     typedef struct _KS_COLCON {
  7030.         UCHAR emph1col:4;
  7031.         UCHAR emph2col:4;
  7032.         UCHAR backcol:4;
  7033.         UCHAR patcol:4;
  7034.         UCHAR emph1con:4;
  7035.         UCHAR emph2con:4;
  7036.         UCHAR backcon:4;
  7037.         UCHAR patcon:4;
  7038.  
  7039.     } KS_COLCON, *PKS_COLCON;
  7040.  
  7041.     typedef struct _KSPROPERTY_SPHLI {
  7042.         USHORT      HLISS;
  7043.         USHORT      Reserved;
  7044.         ULONG       StartPTM;   // start presentation time in x/90000
  7045.         ULONG       EndPTM;     // end PTM in x/90000
  7046.         USHORT      StartX;
  7047.         USHORT      StartY;
  7048.         USHORT      StopX;
  7049.         USHORT      StopY;
  7050.         KS_COLCON   ColCon;     // color contrast description (4 bytes as given in HLI)
  7051.     } KSPROPERTY_SPHLI, *PKSPROPERTY_SPHLI;
  7052.  
  7053.     typedef BOOL KSPROPERTY_COMPOSIT_ON, *PKSPROPERTY_COMPOSIT_ON;
  7054.  
  7055.     #define STATIC_KSPROPSETID_CopyProt \
  7056.         0x0E8A0A40L, 0x6AEF, 0x11D0, 0x9E, 0xD0, 0x00, 0xA0, 0x24, 0xCA, 0x19, 0xB3
  7057.     DEFINE_GUIDSTRUCT("0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3", KSPROPSETID_CopyProt);
  7058.     #define KSPROPSETID_CopyProt DEFINE_GUIDNAMED(KSPROPSETID_CopyProt)
  7059.  
  7060.     typedef enum {
  7061.  
  7062.         KSPROPERTY_DVDCOPY_CHLG_KEY = 0x01,
  7063.         KSPROPERTY_DVDCOPY_DVD_KEY1,
  7064.         KSPROPERTY_DVDCOPY_DEC_KEY2,
  7065.         KSPROPERTY_DVDCOPY_TITLE_KEY,
  7066.         KSPROPERTY_COPY_MACROVISION,
  7067.         KSPROPERTY_DVDCOPY_REGION,
  7068.         KSPROPERTY_DVDCOPY_SET_COPY_STATE,
  7069.         KSPROPERTY_DVDCOPY_DISC_KEY = 0x80
  7070.  
  7071.     } KSPROPERTY_COPYPROT;
  7072.  
  7073.     typedef struct _KS_DVDCOPY_CHLGKEY {
  7074.         BYTE ChlgKey[10];
  7075.         BYTE Reserved[2];
  7076.     } KS_DVDCOPY_CHLGKEY, *PKS_DVDCOPY_CHLGKEY;
  7077.  
  7078.     typedef struct _KS_DVDCOPY_BUSKEY {
  7079.         BYTE BusKey[5];
  7080.         BYTE Reserved[1];
  7081.     } KS_DVDCOPY_BUSKEY, *PKS_DVDCOPY_BUSKEY;
  7082.  
  7083.  
  7084.     typedef struct _KS_DVDCOPY_DISCKEY {
  7085.         BYTE DiscKey[2048];
  7086.     } KS_DVDCOPY_DISCKEY, *PKS_DVDCOPY_DISCKEY;
  7087.  
  7088.     typedef struct _KS_DVDCOPY_REGION {
  7089.         UCHAR   Reserved;
  7090.         UCHAR   RegionData;
  7091.         UCHAR   Reserved2[2];
  7092.     } KS_DVDCOPY_REGION, *PKS_DVDCOPY_REGION;
  7093.  
  7094.     typedef struct _KS_DVDCOPY_TITLEKEY {
  7095.         ULONG KeyFlags;
  7096.         ULONG ReservedNT[2];
  7097.         UCHAR TitleKey[6];
  7098.         UCHAR Reserved[2];
  7099.     } KS_DVDCOPY_TITLEKEY, *PKS_DVDCOPY_TITLEKEY;
  7100.  
  7101.     typedef struct _KS_COPY_MACROVISION {
  7102.         ULONG MACROVISIONLevel;
  7103.     } KS_COPY_MACROVISION, *PKS_COPY_MACROVISION;
  7104.  
  7105.     typedef struct _KS_DVDCOPY_SET_COPY_STATE {
  7106.         ULONG DVDCopyState;
  7107.     } KS_DVDCOPY_SET_COPY_STATE, *PKS_DVDCOPY_SET_COPY_STATE;
  7108.  
  7109.     typedef enum {
  7110.         KS_DVDCOPYSTATE_INITIALIZE,         // indicates we are starting a full
  7111.                                             // copy protection sequence.
  7112.         KS_DVDCOPYSTATE_INITIALIZE_TITLE,   // indicates we are starting a title
  7113.                                             // key copy protection sequence
  7114.         KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
  7115.         KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
  7116.         KS_DVDCOPYSTATE_DONE,
  7117.     } KS_DVDCOPYSTATE;
  7118.  
  7119.     typedef enum {
  7120.         KS_MACROVISION_DISABLED,
  7121.         KS_MACROVISION_LEVEL1,
  7122.         KS_MACROVISION_LEVEL2,
  7123.         KS_MACROVISION_LEVEL3
  7124.     } KS_COPY_MACROVISION_LEVEL, *PKS_COPY_MACROVISION_LEVEL;
  7125.  
  7126.     //
  7127.     // CGMS Copy Protection Flags
  7128.     //
  7129.  
  7130.     #define KS_DVD_CGMS_RESERVED_MASK      0x00000078
  7131.  
  7132.     #define KS_DVD_CGMS_COPY_PROTECT_MASK  0x00000018
  7133.     #define KS_DVD_CGMS_COPY_PERMITTED     0x00000000
  7134.     #define KS_DVD_CGMS_COPY_ONCE          0x00000010
  7135.     #define KS_DVD_CGMS_NO_COPY            0x00000018
  7136.  
  7137.     #define KS_DVD_COPYRIGHT_MASK          0x00000040
  7138.     #define KS_DVD_NOT_COPYRIGHTED         0x00000000
  7139.     #define KS_DVD_COPYRIGHTED             0x00000040
  7140.  
  7141.     #define KS_DVD_SECTOR_PROTECT_MASK     0x00000020
  7142.     #define KS_DVD_SECTOR_NOT_PROTECTED    0x00000000
  7143.     #define KS_DVD_SECTOR_PROTECTED        0x00000020
  7144.  
  7145.  
  7146.     //===========================================================================
  7147.     // The following MUST match the structures in WinGDI.h and AMVideo.h
  7148.     //===========================================================================
  7149.  
  7150.     #define STATIC_KSCATEGORY_TVTUNER \
  7151.         0xa799a800L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  7152.     DEFINE_GUIDSTRUCT("a799a800-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVTUNER);
  7153.     #define KSCATEGORY_TVTUNER DEFINE_GUIDNAMED(KSCATEGORY_TVTUNER)
  7154.  
  7155.     #define STATIC_KSCATEGORY_CROSSBAR \
  7156.         0xa799a801L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  7157.     DEFINE_GUIDSTRUCT("a799a801-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_CROSSBAR);
  7158.     #define KSCATEGORY_CROSSBAR DEFINE_GUIDNAMED(KSCATEGORY_CROSSBAR)
  7159.  
  7160.     #define STATIC_KSCATEGORY_TVAUDIO \
  7161.         0xa799a802L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  7162.     DEFINE_GUIDSTRUCT("a799a802-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVAUDIO);
  7163.     #define KSCATEGORY_TVAUDIO DEFINE_GUIDNAMED(KSCATEGORY_TVAUDIO)
  7164.  
  7165.     #define STATIC_KSCATEGORY_VPMUX \
  7166.         0xa799a803L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  7167.     DEFINE_GUIDSTRUCT("a799a803-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_VPMUX);
  7168.     #define KSCATEGORY_VPMUX DEFINE_GUIDNAMED(KSCATEGORY_VPMUX)
  7169.  
  7170.     #define STATIC_KSCATEGORY_VBICODEC \
  7171.         0x07dad660L, 0x22f1, 0x11d1, 0xa9, 0xf4, 0x00, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  7172.     DEFINE_GUIDSTRUCT("07dad660-22f1-11d1-a9f4-00c04fbbde8f", KSCATEGORY_VBICODEC);
  7173.     #define KSCATEGORY_VBICODEC DEFINE_GUIDNAMED(KSCATEGORY_VBICODEC)
  7174.  
  7175.     // SUBTYPE_VPVideo
  7176.     #define STATIC_KSDATAFORMAT_SUBTYPE_VPVideo\
  7177.         0x5a9b6a40L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  7178.     DEFINE_GUIDSTRUCT("5a9b6a40-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVideo);
  7179.     #define KSDATAFORMAT_SUBTYPE_VPVideo DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVideo)
  7180.  
  7181.     // SUBTYPE_VPVBI
  7182.     #define STATIC_KSDATAFORMAT_SUBTYPE_VPVBI\
  7183.         0x5a9b6a41L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  7184.     DEFINE_GUIDSTRUCT("5a9b6a41-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVBI);
  7185.     #define KSDATAFORMAT_SUBTYPE_VPVBI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVBI)
  7186.  
  7187.  
  7188.     // FORMAT_VideoInfo
  7189.     #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO\
  7190.         0x05589f80L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  7191.     DEFINE_GUIDSTRUCT("05589f80-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_VIDEOINFO);
  7192.     #define KSDATAFORMAT_SPECIFIER_VIDEOINFO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO)
  7193.  
  7194.     // FORMAT_VideoInfo2
  7195.     #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO2\
  7196.         0xf72a76A0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  7197.     DEFINE_GUIDSTRUCT("f72a76A0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VIDEOINFO2);
  7198.     #define KSDATAFORMAT_SPECIFIER_VIDEOINFO2 DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO2)
  7199.  
  7200.     // MEDIATYPE_AnalogVideo
  7201.     #define STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO\
  7202.         0x0482dde1L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
  7203.     DEFINE_GUIDSTRUCT("0482dde1-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_TYPE_ANALOGVIDEO);
  7204.     #define KSDATAFORMAT_TYPE_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGVIDEO)
  7205.  
  7206.     // FORMAT_AnalogVideo
  7207.     #define STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO\
  7208.         0x0482dde0L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
  7209.     DEFINE_GUIDSTRUCT("0482dde0-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_SPECIFIER_ANALOGVIDEO);
  7210.     #define KSDATAFORMAT_SPECIFIER_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_ANALOGVIDEO)
  7211.  
  7212.     // FORMAT_VBI
  7213.     #define STATIC_KSDATAFORMAT_SPECIFIER_VBI\
  7214.         0xf72a76e0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  7215.     DEFINE_GUIDSTRUCT("f72a76e0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VBI);
  7216.     #define KSDATAFORMAT_SPECIFIER_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VBI)
  7217.  
  7218.     // MEDIATYPE_VBI
  7219.     #define STATIC_KSDATAFORMAT_TYPE_VBI\
  7220.         0xf72a76e1L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  7221.     DEFINE_GUIDSTRUCT("f72a76e1-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_TYPE_VBI);
  7222.     #define KSDATAFORMAT_TYPE_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VBI)
  7223.  
  7224.     // SUBTYPE_RAW8
  7225.     #define STATIC_KSDATAFORMAT_SUBTYPE_RAW8\
  7226.         0xca20d9a0, 0x3e3e, 0x11d1, 0x9b, 0xf9, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0xbf
  7227.     DEFINE_GUIDSTRUCT("ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf", KSDATAFORMAT_SUBTYPE_RAW8);
  7228.     #define KSDATAFORMAT_SUBTYPE_RAW8 DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RAW8)
  7229.  
  7230.     // MEDIASUBTYPE_CC
  7231.     #define STATIC_KSDATAFORMAT_SUBTYPE_CC\
  7232.         0x33214cc1, 0x11f, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
  7233.     DEFINE_GUIDSTRUCT("33214CC1-011F-11D2-B4B1-00A0D102CFBE", KSDATAFORMAT_SUBTYPE_CC);
  7234.     #define KSDATAFORMAT_SUBTYPE_CC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_CC)
  7235.  
  7236.     // MEDIASUBTYPE_NABTS
  7237.     #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS\
  7238.         0xf72a76e2L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  7239.     DEFINE_GUIDSTRUCT("f72a76e2-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_NABTS);
  7240.     #define KSDATAFORMAT_SUBTYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS)
  7241.  
  7242.     // MEDIASUBTYPE_TELETEXT
  7243.     #define STATIC_KSDATAFORMAT_SUBTYPE_TELETEXT\
  7244.         0xf72a76e3L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  7245.     DEFINE_GUIDSTRUCT("f72a76e3-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_TELETEXT);
  7246.     #define KSDATAFORMAT_SUBTYPE_TELETEXT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_TELETEXT)
  7247.  
  7248.  
  7249.  
  7250.     /* constants for the biCompression field */
  7251.     #define KS_BI_RGB        0L
  7252.     #define KS_BI_RLE8       1L
  7253.     #define KS_BI_RLE4       2L
  7254.     #define KS_BI_BITFIELDS  3L
  7255.  
  7256.     typedef struct tagKS_RGBQUAD { // rgbq
  7257.         BYTE    rgbBlue;
  7258.         BYTE    rgbGreen;
  7259.         BYTE    rgbRed;
  7260.         BYTE    rgbReserved;
  7261.     } KS_RGBQUAD, *PKS_RGBQUAD;
  7262.  
  7263.     /* constants for palettes */
  7264.     #define KS_iPALETTE_COLORS 256     // Maximum colours in palette
  7265.     #define KS_iEGA_COLORS 16          // Number colours in EGA palette
  7266.     #define KS_iMASK_COLORS 3          // Maximum three components
  7267.     #define KS_iTRUECOLOR 16           // Minimum true colour device
  7268.     #define KS_iRED 0                  // Index position for RED mask
  7269.     #define KS_iGREEN 1                // Index position for GREEN mask
  7270.     #define KS_iBLUE 2                 // Index position for BLUE mask
  7271.     #define KS_iPALETTE 8              // Maximum colour depth using a palette
  7272.     #define KS_iMAXBITS 8              // Maximum bits per colour component
  7273.     #define KS_SIZE_EGA_PALETTE (KS_iEGA_COLORS * sizeof(KS_RGBQUAD))
  7274.     #define KS_SIZE_PALETTE (KS_iPALETTE_COLORS * sizeof(KS_RGBQUAD))
  7275.  
  7276.     typedef struct tagKS_BITMAPINFOHEADER{
  7277.             DWORD      biSize;
  7278.             LONG       biWidth;
  7279.             LONG       biHeight;
  7280.             WORD       biPlanes;
  7281.             WORD       biBitCount;
  7282.             DWORD      biCompression;
  7283.             DWORD      biSizeImage;
  7284.             LONG       biXPelsPerMeter;
  7285.             LONG       biYPelsPerMeter;
  7286.             DWORD      biClrUsed;
  7287.             DWORD      biClrImportant;
  7288.     } KS_BITMAPINFOHEADER, *PKS_BITMAPINFOHEADER;
  7289.  
  7290.     // Used for true colour images that also have a palette
  7291.  
  7292.     typedef struct tag_KS_TRUECOLORINFO {
  7293.         DWORD   dwBitMasks[KS_iMASK_COLORS];
  7294.         KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];
  7295.     } KS_TRUECOLORINFO, *PKS_TRUECOLORINFO;
  7296.  
  7297.  
  7298.     #define KS_WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
  7299.     #define KS_DIBWIDTHBYTES(bi) (DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
  7300.     #define KS__DIBSIZE(bi) (KS_DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
  7301.     #define KS_DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi))
  7302.  
  7303.     typedef LONGLONG REFERENCE_TIME;
  7304.  
  7305.     // The BITMAPINFOHEADER contains all the details about the video stream such
  7306.     // as the actual image dimensions and their pixel depth. A source filter may
  7307.     // also request that the sink take only a section of the video by providing a
  7308.     // clipping rectangle in rcSource. In the worst case where the sink filter
  7309.     // forgets to check this on connection it will simply render the whole thing
  7310.     // which isn't a disaster. Ideally a sink filter will check the rcSource and
  7311.     // if it doesn't support image extraction and the rectangle is not empty then
  7312.     // it will reject the connection. A filter should use SetRectEmpty to reset a
  7313.     // rectangle to all zeroes (and IsRectEmpty to later check the rectangle).
  7314.     // The rcTarget specifies the destination rectangle for the video, for most
  7315.     // source filters they will set this to all zeroes, a downstream filter may
  7316.     // request that the video be placed in a particular area of the buffers it
  7317.     // supplies in which case it will call QueryAccept with a non empty target
  7318.  
  7319.     typedef struct tagKS_VIDEOINFOHEADER {
  7320.  
  7321.         RECT                rcSource;          // The bit we really want to use
  7322.         RECT                rcTarget;          // Where the video should go
  7323.         DWORD               dwBitRate;         // Approximate bit data rate
  7324.         DWORD               dwBitErrorRate;    // Bit error rate for this stream
  7325.         REFERENCE_TIME      AvgTimePerFrame;   // Average time per frame (100ns units)
  7326.  
  7327.         KS_BITMAPINFOHEADER bmiHeader;
  7328.  
  7329.     } KS_VIDEOINFOHEADER, *PKS_VIDEOINFOHEADER;
  7330.  
  7331.     // !!! WARNING !!!
  7332.     // DO NOT use the following structure unless you are sure that the BITMAPINFOHEADER
  7333.     // has a normal biSize == sizeof(BITMAPINFOHEADER) !
  7334.     // !!! WARNING !!!
  7335.  
  7336.     typedef struct tagKS_VIDEOINFO {
  7337.  
  7338.         RECT            rcSource;          // The bit we really want to use
  7339.         RECT            rcTarget;          // Where the video should go
  7340.         DWORD           dwBitRate;         // Approximate bit data rate
  7341.         DWORD           dwBitErrorRate;    // Bit error rate for this stream
  7342.         REFERENCE_TIME  AvgTimePerFrame;   // Average time per frame (100ns units)
  7343.  
  7344.         KS_BITMAPINFOHEADER bmiHeader;
  7345.  
  7346.         union {
  7347.             KS_RGBQUAD          bmiColors[KS_iPALETTE_COLORS];     // Colour palette
  7348.             DWORD               dwBitMasks[KS_iMASK_COLORS];       // True colour masks
  7349.             KS_TRUECOLORINFO    TrueColorInfo;                     // Both of the above
  7350.         };
  7351.  
  7352.     } KS_VIDEOINFO, *PKS_VIDEOINFO;
  7353.  
  7354.  
  7355.     #define KS_SIZE_MASKS (KS_iMASK_COLORS * sizeof(DWORD))
  7356.     #define KS_SIZE_PREHEADER (FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader))
  7357.  
  7358.     // For normal size
  7359.     // #define KS_SIZE_VIDEOHEADER (sizeof(KS_BITMAPINFOHEADER) + KS_SIZE_PREHEADER)
  7360.     // !!! for abnormal biSizes
  7361.     #define KS_SIZE_VIDEOHEADER(pbmi) ((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER)
  7362.  
  7363.     // VBI
  7364.     // Used for NABTS, CC, Intercast,
  7365.     typedef struct tagKS_VBIINFOHEADER {
  7366.         ULONG       StartLine;              // inclusive
  7367.         ULONG       EndLine;                // inclusive
  7368.         ULONG       SamplingFrequency;      // Hz.
  7369.         ULONG       MinLineStartTime;       // microSec * 100 from HSync LE
  7370.         ULONG       MaxLineStartTime;       // microSec * 100 from HSync LE
  7371.         ULONG       ActualLineStartTime;    // microSec * 100 from HSync LE
  7372.         ULONG       ActualLineEndTime;      // microSec * 100 from HSync LE
  7373.         ULONG       VideoStandard;          // KS_AnalogVideoStandard*
  7374.         ULONG       SamplesPerLine;
  7375.         ULONG       StrideInBytes;          // May be > SamplesPerLine
  7376.         ULONG       BufferSize;             // Bytes
  7377.     } KS_VBIINFOHEADER, *PKS_VBIINFOHEADER;
  7378.  
  7379.     // VBI Sampling Rates
  7380.     #define KS_VBIDATARATE_NABTS            (5727272L)
  7381.     #define KS_VBIDATARATE_CC               ( 503493L)    // ~= 1/1.986125e-6
  7382.     #define KS_VBISAMPLINGRATE_4X_NABTS     ((long)(4*KS_VBIDATARATE_NABTS))
  7383.     #define KS_VBISAMPLINGRATE_47X_NABTS    ((long)(27000000))
  7384.     #define KS_VBISAMPLINGRATE_5X_NABTS     ((long)(5*KS_VBIDATARATE_NABTS))
  7385.  
  7386.     #define KS_47NABTS_SCALER (KS_VBISAMPLINGRATE_47X_NABTS/(double)KS_VBIDATARATE_NABTS)
  7387.  
  7388.     // Analog video variant - Use this when the format is FORMAT_AnalogVideo
  7389.     //
  7390.     // rcSource defines the portion of the active video signal to use
  7391.     // rcTarget defines the destination rectangle
  7392.     //    both of the above are relative to the dwActiveWidth and dwActiveHeight fields
  7393.     // dwActiveWidth is currently set to 720 for all formats (but could change for HDTV)
  7394.     // dwActiveHeight is 483 for NTSC and 575 for PAL/SECAM  (but could change for HDTV)
  7395.  
  7396.     typedef struct tagKS_AnalogVideoInfo {
  7397.         RECT            rcSource;           // Width max is 720, height varies w/ TransmissionStd
  7398.         RECT            rcTarget;           // Where the video should go
  7399.         DWORD           dwActiveWidth;      // Always 720 (CCIR-601 active samples per line)
  7400.         DWORD           dwActiveHeight;     // 483 for NTSC, 575 for PAL/SECAM
  7401.         REFERENCE_TIME  AvgTimePerFrame;    // Normal ActiveMovie units (100 nS)
  7402.     } KS_ANALOGVIDEOINFO, *PKS_ANALOGVIDEOINFO;
  7403.  
  7404.     //===========================================================================
  7405.     // Data packet passed on Analog video stream channel change
  7406.     //===========================================================================
  7407.  
  7408.     #define KS_TVTUNER_CHANGE_BEGIN_TUNE    0x0001L  // Starting a tuning operation
  7409.     #define KS_TVTUNER_CHANGE_END_TUNE      0x0002L  // Ending a tuning operation
  7410.  
  7411.     typedef struct tagKS_TVTUNER_CHANGE_INFO {
  7412.        DWORD                    dwFlags;                // KS_TVTUNER_CHANGE_*
  7413.        DWORD                    dwCountryCode;
  7414.        DWORD                    dwAnalogVideoStandard;  // KS_AnalogVideoStandard
  7415.        DWORD                    dwChannel;
  7416.     } KS_TVTUNER_CHANGE_INFO, *PKS_TVTUNER_CHANGE_INFO;
  7417.  
  7418.     //===========================================================================
  7419.     // Video format blocks
  7420.     //===========================================================================
  7421.  
  7422.     typedef enum {
  7423.         KS_MPEG2Level_Low,
  7424.         KS_MPEG2Level_Main,
  7425.         KS_MPEG2Level_High1440,
  7426.         KS_MPEG2Level_High
  7427.     } KS_MPEG2Level;
  7428.  
  7429.     typedef enum {
  7430.         KS_MPEG2Profile_Simple,
  7431.         KS_MPEG2Profile_Main,
  7432.         KS_MPEG2Profile_SNRScalable,
  7433.         KS_MPEG2Profile_SpatiallyScalable,
  7434.         KS_MPEG2Profile_High
  7435.     } KS_MPEG2Profile;
  7436.  
  7437.     #define KS_INTERLACE_IsInterlaced            0x00000001  // if 0, other interlace bits are irrelevent
  7438.     #define KS_INTERLACE_1FieldPerSample         0x00000002  // else 2 fields per media sample
  7439.     #define KS_INTERLACE_Field1First             0x00000004  // else Field 2 is first;  top field in PAL is field 1, top field in NTSC is field 2?
  7440.     #define KS_INTERLACE_UNUSED                  0x00000008  //
  7441.     #define KS_INTERLACE_FieldPatternMask        0x00000030  // use this mask with AMINTERLACE_FieldPat*
  7442.     #define KS_INTERLACE_FieldPatField1Only      0x00000000  // Data never contains a Field2
  7443.     #define KS_INTERLACE_FieldPatField2Only      0x00000010  // Data never contains a Field1
  7444.     #define KS_INTERLACE_FieldPatBothRegular     0x00000020  // There will be a Field2 for every Field1 (required for Weave?)
  7445.     #define KS_INTERLACE_FieldPatBothIrregular   0x00000030  // Random pattern of Field1s and Field2s
  7446.     #define KS_INTERLACE_DisplayModeMask         0x000000c0
  7447.     #define KS_INTERLACE_DisplayModeBobOnly      0x00000000
  7448.     #define KS_INTERLACE_DisplayModeWeaveOnly    0x00000040
  7449.     #define KS_INTERLACE_DisplayModeBobOrWeave   0x00000080
  7450.  
  7451.  
  7452.  
  7453.     #define KS_MPEG2_DoPanScan           0x00000001  //if set, the MPEG-2 video decoder should crop output image
  7454.                                                     //  based on pan-scan vectors in picture_display_extension
  7455.                                                     //  and change the picture aspect ratio accordingly.
  7456.     #define KS_MPEG2_DVDLine21Field1     0x00000002  //if set, the MPEG-2 decoder must be able to produce an output
  7457.                                                     //  pin for DVD style closed caption data found in GOP layer of field 1
  7458.     #define KS_MPEG2_DVDLine21Field2     0x00000004  //if set, the MPEG-2 decoder must be able to produce an output
  7459.                                                     //  pin for DVD style closed caption data found in GOP layer of field 2
  7460.     #define KS_MPEG2_SourceIsLetterboxed 0x00000008  //if set, indicates that black bars have been encoded in the top
  7461.                                                     //  and bottom of the video.
  7462.     #define KS_MPEG2_FilmCameraMode      0x00000010  //if set, indicates "film mode" used for 625/50 content.  If cleared,
  7463.                                                     //  indicates that "camera mode" was used.
  7464.     #define KS_MPEG2_LetterboxAnalogOut  0x00000020  //if set and this stream is sent to an analog output, it should
  7465.                             //  be letterboxed.  Streams sent to VGA should be letterboxed only by renderers.
  7466.     #define KS_MPEG2_DSS_UserData        0x00000040  //if set, the MPEG-2 decoder must process DSS style user data
  7467.     #define KS_MPEG2_DVB_UserData        0x00000080  //if set, the MPEG-2 decoder must process DVB style user data
  7468.     #define KS_MPEG2_27MhzTimebase       0x00000100  //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  7469.  
  7470.     typedef struct tagKS_VIDEOINFOHEADER2 {
  7471.         RECT                rcSource;
  7472.         RECT                rcTarget;
  7473.         DWORD               dwBitRate;
  7474.         DWORD               dwBitErrorRate;
  7475.         REFERENCE_TIME      AvgTimePerFrame;
  7476.         DWORD               dwInterlaceFlags;   // use AMINTERLACE_* defines. Reject connection if undefined bits are not 0
  7477.         DWORD               dwCopyProtectFlags; // use AMCOPYPROTECT_* defines. Reject connection if undefined bits are not 0
  7478.         DWORD               dwPictAspectRatioX; // X dimension of picture aspect ratio, e.g. 16 for 16x9 display
  7479.         DWORD               dwPictAspectRatioY; // Y dimension of picture aspect ratio, e.g.  9 for 16x9 display
  7480.         DWORD               dwReserved1;        // must be 0; reject connection otherwise
  7481.         DWORD               dwReserved2;        // must be 0; reject connection otherwise
  7482.         KS_BITMAPINFOHEADER bmiHeader;
  7483.     } KS_VIDEOINFOHEADER2, *PKS_VIDEOINFOHEADER2;
  7484.  
  7485.     typedef struct tagKS_MPEG1VIDEOINFO {
  7486.         KS_VIDEOINFOHEADER hdr; // Compatible with VIDEOINFO
  7487.         DWORD dwStartTimeCode; // 25-bit Group of pictures time code at start of data
  7488.         DWORD cbSequenceHeader; // Length in bytes of bSequenceHeader
  7489.         BYTE bSequenceHeader[1]; // Sequence header including quantization matrices if any
  7490.     } KS_MPEG1VIDEOINFO, *PKS_MPEG1VIDEOINFO;
  7491.  
  7492.     #define KS_MAX_SIZE_MPEG1_SEQUENCE_INFO 140
  7493.     #define KS_SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(KS_MPEG1VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  7494.     #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  7495.  
  7496.     typedef struct tagKS_MPEGVIDEOINFO2 {
  7497.         KS_VIDEOINFOHEADER2 hdr;
  7498.         DWORD               dwStartTimeCode;        //  ?? not used for DVD ??
  7499.         DWORD               cbSequenceHeader;       // is 0 for DVD (no sequence header)
  7500.         DWORD               dwProfile;              // use enum MPEG2Profile
  7501.         DWORD               dwLevel;                // use enum MPEG2Level
  7502.         DWORD               dwFlags;                // use AMMPEG2_* defines.  Reject connection if undefined bits are not 0
  7503.         DWORD               bSequenceHeader[1];     // DWORD instead of Byte for alignment purposes
  7504.                                                     //   For MPEG-2, if a sequence_header is included, the sequence_extension
  7505.                                                     //   should also be included
  7506.     } KS_MPEGVIDEOINFO2, *PKS_MPEGVIDEOINFO2;
  7507.  
  7508.  
  7509.     #define KS_SIZE_MPEGVIDEOINFO2(pv) (FIELD_OFFSET(KS_MPEGVIDEOINFO2, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  7510.     #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  7511.  
  7512.     //===========================================================================
  7513.     // Audio format blocks
  7514.     //===========================================================================
  7515.  
  7516.     //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  7517.     #define KS_MPEGAUDIOINFO_27MhzTimebase      0x00000001
  7518.  
  7519.     typedef struct tagKS_MPEAUDIOINFO {
  7520.         DWORD               dwFlags;            // use KS_MPEGAUDIOINFO_* defines.  Reject connection if undefined bits are not 0
  7521.         DWORD               dwReserved1;        // must be 0; reject connection otherwise
  7522.         DWORD               dwReserved2;        // must be 0; reject connection otherwise
  7523.         DWORD               dwReserved3;        // must be 0; reject connection otherwise
  7524.     } KS_MPEGAUDIOINFO, *PKS_MPEGAUDIOINFO;
  7525.  
  7526.     //===========================================================================
  7527.     // Video DATAFORMATs
  7528.     //===========================================================================
  7529.  
  7530.     typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER {
  7531.         KSDATAFORMAT            DataFormat;
  7532.         KS_VIDEOINFOHEADER      VideoInfoHeader;
  7533.     } KS_DATAFORMAT_VIDEOINFOHEADER, *PKS_DATAFORMAT_VIDEOINFOHEADER;
  7534.  
  7535.     typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER2 {
  7536.         KSDATAFORMAT            DataFormat;
  7537.         KS_VIDEOINFOHEADER2     VideoInfoHeader2;
  7538.     } KS_DATAFORMAT_VIDEOINFOHEADER2, *PKS_DATAFORMAT_VIDEOINFOHEADER2;
  7539.  
  7540.     typedef struct tagKS_DATAFORMAT_VIDEOINFO_PALETTE {
  7541.         KSDATAFORMAT            DataFormat;
  7542.         KS_VIDEOINFO            VideoInfo;
  7543.     } KS_DATAFORMAT_VIDEOINFO_PALETTE, *PKS_DATAFORMAT_VIDEOINFO_PALETTE;
  7544.  
  7545.     typedef struct tagKS_DATAFORMAT_VBIINFOHEADER {
  7546.         KSDATAFORMAT            DataFormat;
  7547.         KS_VBIINFOHEADER        VBIInfoHeader;
  7548.     } KS_DATAFORMAT_VBIINFOHEADER, *PKS_DATAFORMAT_VBIINFOHEADER;
  7549.  
  7550.     typedef struct  _KS_VIDEO_STREAM_CONFIG_CAPS  {
  7551.         GUID guid;                  // will be MEDIATYPE_Video
  7552.         ULONG VideoStandard;        // logical OR of all AnalogVideoStandards
  7553.                                     // supported
  7554.         SIZE InputSize;             // the inherent size of the incoming signal
  7555.                                     // (every pixel unique)
  7556.         SIZE MinCroppingSize;       // smallest rcSrc cropping rect allowed
  7557.         SIZE MaxCroppingSize;       // largest rcSrc cropping rect allowed
  7558.         int CropGranularityX;       // granularity of cropping size
  7559.         int CropGranularityY;
  7560.         int CropAlignX;             // alignment of cropping rect
  7561.         int CropAlignY;
  7562.         SIZE MinOutputSize;         // smallest bitmap stream can produce
  7563.         SIZE MaxOutputSize;         // largest  bitmap stream can produce
  7564.         int OutputGranularityX;     // granularity of output bitmap size
  7565.         int OutputGranularityY;
  7566.         int StretchTapsX;           // 0, no stretch, 1 pix dup, 2 interp, ...
  7567.         int StretchTapsY;           //    Describes quality of hardware scaler
  7568.         int ShrinkTapsX;            //
  7569.         int ShrinkTapsY;            //
  7570.         LONGLONG MinFrameInterval;  // 100 nS units
  7571.         LONGLONG MaxFrameInterval;
  7572.         LONG MinBitsPerSecond;
  7573.         LONG MaxBitsPerSecond;
  7574.     } KS_VIDEO_STREAM_CONFIG_CAPS, *PKS_VIDEO_STREAM_CONFIG_CAPS;
  7575.  
  7576.     //===========================================================================
  7577.     // Video DATARANGEs
  7578.     //===========================================================================
  7579.  
  7580.     typedef struct tagKS_DATARANGE_VIDEO {
  7581.        KSDATARANGE                  DataRange;
  7582.        BOOL                         bFixedSizeSamples;      // all samples same size?
  7583.        BOOL                         bTemporalCompression;   // all I frames?
  7584.        DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  7585.        DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  7586.        KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  7587.        KS_VIDEOINFOHEADER           VideoInfoHeader;        // default format
  7588.     } KS_DATARANGE_VIDEO, *PKS_DATARANGE_VIDEO;
  7589.  
  7590.     typedef struct tagKS_DATARANGE_VIDEO2 {
  7591.        KSDATARANGE                  DataRange;
  7592.        BOOL                         bFixedSizeSamples;      // all samples same size?
  7593.        BOOL                         bTemporalCompression;   // all I frames?
  7594.        DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  7595.        DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  7596.        KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  7597.        KS_VIDEOINFOHEADER2          VideoInfoHeader;        // default format
  7598.     } KS_DATARANGE_VIDEO2, *PKS_DATARANGE_VIDEO2;
  7599.  
  7600.     typedef struct tagKS_DATARANGE_MPEG1_VIDEO {
  7601.         KSDATARANGE DataRange;
  7602.         BOOL bFixedSizeSamples; // all samples same size?
  7603.         BOOL bTemporalCompression; // all I frames?
  7604.         DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
  7605.         DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
  7606.         KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
  7607.         KS_MPEG1VIDEOINFO VideoInfoHeader; // default format
  7608.     } KS_DATARANGE_MPEG1_VIDEO, *PKS_DATARANGE_MPEG1_VIDEO;
  7609.  
  7610.     typedef struct tagKS_DATARANGE_MPEG2_VIDEO {
  7611.        KSDATARANGE                  DataRange;
  7612.        BOOL                         bFixedSizeSamples;      // all samples same size?
  7613.        BOOL                         bTemporalCompression;   // all I frames?
  7614.        DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  7615.        DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  7616.        KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  7617.        KS_MPEGVIDEOINFO2            VideoInfoHeader;        // default format
  7618.     } KS_DATARANGE_MPEG2_VIDEO, *PKS_DATARANGE_MPEG2_VIDEO;
  7619.  
  7620.     typedef struct tagKS_DATARANGE_VIDEO_PALETTE {
  7621.        KSDATARANGE                  DataRange;
  7622.        BOOL                         bFixedSizeSamples;      // all samples same size?
  7623.        BOOL                         bTemporalCompression;   // all I frames?
  7624.        DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  7625.        DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  7626.        KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  7627.        KS_VIDEOINFO                 VideoInfo;              // default format
  7628.     } KS_DATARANGE_VIDEO_PALETTE, *PKS_DATARANGE_VIDEO_PALETTE;
  7629.  
  7630.     typedef struct tagKS_DATARANGE_VIDEO_VBI {
  7631.        KSDATARANGE                  DataRange;
  7632.        BOOL                         bFixedSizeSamples;      // all samples same size?
  7633.        BOOL                         bTemporalCompression;   // all I frames?
  7634.        DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  7635.        DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  7636.        KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  7637.        KS_VBIINFOHEADER             VBIInfoHeader;          // default format
  7638.     } KS_DATARANGE_VIDEO_VBI, *PKS_DATARANGE_VIDEO_VBI;
  7639.  
  7640.     typedef struct tagKS_DATARANGE_ANALOGVIDEO {
  7641.        KSDATARANGE                  DataRange;
  7642.        KS_ANALOGVIDEOINFO           AnalogVideoInfo;
  7643.     } KS_DATARANGE_ANALOGVIDEO, *PKS_DATARANGE_ANALOGVIDEO;
  7644.  
  7645.     //===========================================================================
  7646.     // StreamDescriptionFlags
  7647.     //
  7648.     // These define the "purpose" of each video stream
  7649.     //===========================================================================
  7650.  
  7651.     #define KS_VIDEOSTREAM_PREVIEW          0x0001  // Preview stream
  7652.     #define KS_VIDEOSTREAM_CAPTURE          0x0002  // Capture stream
  7653.     #define KS_VIDEOSTREAM_VBI              0x0010  // Field1 VBI
  7654.     #define KS_VIDEOSTREAM_NABTS            0x0020  // Field1 NABTS
  7655.     #define KS_VIDEOSTREAM_CC               0x0100  // Closed Captioning
  7656.     #define KS_VIDEOSTREAM_EDS              0x0200  // Extended Data Services
  7657.     #define KS_VIDEOSTREAM_TELETEXT         0x0400  // Field1 Teletext only
  7658.     #define KS_VIDEOSTREAM_STILL            0x1000  // Still image input
  7659.     #define KS_VIDEOSTREAM_IS_VPE           0x8000  // Is a VPE based stream?
  7660.  
  7661.     // MemoryAllocationFlags
  7662.     #define KS_VIDEO_ALLOC_VPE_SYSTEM       0x0001  // VPE surface in system memory
  7663.     #define KS_VIDEO_ALLOC_VPE_DISPLAY      0x0002  // VPE surface in display memory
  7664.     #define KS_VIDEO_ALLOC_VPE_AGP          0x0004  // VPE surface in AGP memory
  7665.  
  7666.     //////////////////////////////////////////////////////////////
  7667.     // Capture driver VBI property sets
  7668.     //////////////////////////////////////////////////////////////
  7669.  
  7670.     // {F162C607-7B35-496f-AD7F-2DCA3B46B718}
  7671.     #define STATIC_KSPROPSETID_VBICAP_PROPERTIES\
  7672.         0xf162c607, 0x7b35, 0x496f, 0xad, 0x7f, 0x2d, 0xca, 0x3b, 0x46, 0xb7, 0x18
  7673.     DEFINE_GUIDSTRUCT("F162C607-7B35-496f-AD7F-2DCA3B46B718", KSPROPSETID_VBICAP_PROPERTIES);
  7674.     #define KSPROPSETID_VBICAP_PROPERTIES DEFINE_GUIDNAMED(KSPROPSETID_VBICAP_PROPERTIES)
  7675.  
  7676.     typedef enum {
  7677.         KSPROPERTY_VBICAP_PROPERTIES_PROTECTION = 0x01,
  7678.     } KSPROPERTY_VBICAP;
  7679.  
  7680.     typedef struct _VBICAP_PROPERTIES_PROTECTION_S {
  7681.         KSPROPERTY Property;
  7682.         ULONG      StreamIndex;                     // Index of stream
  7683.         ULONG      Status;
  7684.     } VBICAP_PROPERTIES_PROTECTION_S, *PVBICAP_PROPERTIES_PROTECTION_S;
  7685.     #define KS_VBICAP_PROTECTION_MV_PRESENT     0x0001L
  7686.     #define KS_VBICAP_PROTECTION_MV_HARDWARE    0x0002L
  7687.     #define KS_VBICAP_PROTECTION_MV_DETECTED    0x0004L
  7688.  
  7689.  
  7690.     /***************************************************************************/
  7691.     /* VBI Related GUIDs, structs and properties for codecs(generic, cc, nabts)*/
  7692.     /***************************************************************************/
  7693.  
  7694.     ///////////////////////////////////////////////////////////////////////////////////////
  7695.     // IP/NABTS Protocol Reserved Group IDs - Overall Range 0x800-0x8FF [Decimal 2048-2079]
  7696.     // Intervening values(0-F) are used if there are multiple providers at a particular tier
  7697.     ///////////////////////////////////////////////////////////////////////////////////////
  7698.  
  7699.     // Used by individual content creators in show footage/data
  7700.     #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE                 0x800
  7701.     #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE      0x810
  7702.  
  7703.     // Used by production company in finished show data
  7704.     #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE       0x820
  7705.     #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE    0x830
  7706.  
  7707.     // Used by broadcast syndicates in syndicated show data
  7708.     #define KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE          0x840
  7709.     #define KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE       0x850
  7710.  
  7711.     // Used by tv networks in network television data
  7712.     #define KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE             0x860
  7713.     #define KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE          0x870
  7714.  
  7715.     // Used by telvision stations in local programming data
  7716.     #define KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE       0x880
  7717.     #define KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE    0x890
  7718.  
  7719.     // Used by cable system in cable head-end originated data
  7720.     #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE       0x8A0
  7721.     #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE    0x8B0
  7722.  
  7723.     // The values between 0x8C0 - 0x8EF are reserved for future expansion
  7724.  
  7725.     // Used by Microsoft for Testing purposes (0x8F0 - 0x8FF)
  7726.     #define KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE     0x8F0
  7727.  
  7728.     //////////////////////////////////////////////////////////////
  7729.     // Stream Format FEC-corrected NABTS bundles
  7730.     //////////////////////////////////////////////////////////////
  7731.  
  7732.     #define STATIC_KSDATAFORMAT_TYPE_NABTS \
  7733.      0xe757bca0, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  7734.     DEFINE_GUIDSTRUCT("E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_TYPE_NABTS);
  7735.     #define KSDATAFORMAT_TYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_NABTS)
  7736.  
  7737.     #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS_FEC \
  7738.      0xe757bca1, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  7739.     DEFINE_GUIDSTRUCT("E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_SUBTYPE_NABTS_FEC);
  7740.     #define KSDATAFORMAT_SUBTYPE_NABTS_FEC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS_FEC)
  7741.  
  7742.  
  7743.     //////////////////////////////////////////////////////////////
  7744.     // NABTS Bundle data structure definition
  7745.     //////////////////////////////////////////////////////////////
  7746.  
  7747.     #define MAX_NABTS_VBI_LINES_PER_FIELD   11
  7748.     #define NABTS_LINES_PER_BUNDLE          16
  7749.     #define NABTS_PAYLOAD_PER_LINE          28
  7750.     #define NABTS_BYTES_PER_LINE            36
  7751.  
  7752.     typedef struct _NABTSFEC_BUFFER {
  7753.         ULONG       dataSize;
  7754.         USHORT      groupID;
  7755.         USHORT      Reserved;
  7756.         UCHAR       data[NABTS_LINES_PER_BUNDLE * NABTS_PAYLOAD_PER_LINE];
  7757.     } NABTSFEC_BUFFER, *PNABTSFEC_BUFFER;
  7758.  
  7759.     //////////////////////////////////////////////////////////////
  7760.     // vbi codec filtering pin properties
  7761.     //////////////////////////////////////////////////////////////
  7762.  
  7763.     #define STATIC_KSPROPSETID_VBICodecFiltering \
  7764.         0xcafeb0caL, 0x8715, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0xc0, 0xed, 0xba, 0xbe
  7765.     DEFINE_GUIDSTRUCT("cafeb0ca-8715-11d0-bd6a-0035c0edbabe", KSPROPSETID_VBICodecFiltering);
  7766.     #define KSPROPSETID_VBICodecFiltering DEFINE_GUIDNAMED(KSPROPSETID_VBICodecFiltering)
  7767.  
  7768.     typedef enum {
  7769.         KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY = 0x01,
  7770.         KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  7771.         KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  7772.         KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  7773.         KSPROPERTY_VBICODECFILTERING_STATISTICS,
  7774.     } KSPROPERTY_VBICODECFILTERING;
  7775.  
  7776.     typedef struct _VBICODECFILTERING_SCANLINES {
  7777.         DWORD   DwordBitArray[32];      // An array of scanline bits 0..1024(32*32)
  7778.     } VBICODECFILTERING_SCANLINES, *PVBICODECFILTERING_SCANLINES;
  7779.  
  7780.     typedef struct _VBICODECFILTERING_NABTS_SUBSTREAMS {
  7781.         DWORD   SubstreamMask[128];   // An array of 4096 bits (one for each NABTS GroupID)
  7782.     } VBICODECFILTERING_NABTS_SUBSTREAMS, *PVBICODECFILTERING_NABTS_SUBSTREAMS;
  7783.  
  7784.     typedef struct _VBICODECFILTERING_CC_SUBSTREAMS {
  7785.         DWORD   SubstreamMask;        // An array of 32 bits (see KS_CC_SUBSTREAM *)
  7786.     } VBICODECFILTERING_CC_SUBSTREAMS, *PVBICODECFILTERING_CC_SUBSTREAMS;
  7787.  
  7788.     #define KS_CC_SUBSTREAM_ODD               0x0001L
  7789.     #define KS_CC_SUBSTREAM_EVEN              0x0002L
  7790.     #define KS_CC_SUBSTREAM_SERVICE_MASK_DC1  0x00F0L // DataChannel1: CC1,CC3,T1,T3
  7791.     #define KS_CC_SUBSTREAM_SERVICE_CC1       0x0010L
  7792.     #define KS_CC_SUBSTREAM_SERVICE_CC3       0x0020L
  7793.     #define KS_CC_SUBSTREAM_SERVICE_T1        0x0040L
  7794.     #define KS_CC_SUBSTREAM_SERVICE_T3        0x0080L
  7795.     #define KS_CC_SUBSTREAM_SERVICE_MASK_DC2  0x0F00L // DataChannel2: CC2,CC4,T2,T4
  7796.     #define KS_CC_SUBSTREAM_SERVICE_CC2       0x0100L
  7797.     #define KS_CC_SUBSTREAM_SERVICE_CC4       0x0200L
  7798.     #define KS_CC_SUBSTREAM_SERVICE_T2        0x0400L
  7799.     #define KS_CC_SUBSTREAM_SERVICE_T4        0x0800L
  7800.     #define KS_CC_SUBSTREAM_SERVICE_XDS       0x1000L
  7801.  
  7802.     ///////////////////////////////////////////////////////////////////
  7803.     // Hardware decoded CC stream format
  7804.     ///////////////////////////////////////////////////////////////////
  7805.  
  7806.     #define CC_MAX_HW_DECODE_LINES 12
  7807.     typedef struct _CC_BYTE_PAIR {
  7808.         BYTE        Decoded[2];
  7809.         USHORT      Reserved;
  7810.     } CC_BYTE_PAIR, *PCC_BYTE_PAIR;
  7811.  
  7812.     typedef struct _CC_HW_FIELD {
  7813.         VBICODECFILTERING_SCANLINES  ScanlinesRequested;
  7814.         ULONG                        fieldFlags;    // KS_VBI_FLAG_FIELD1,2
  7815.         LONGLONG                     PictureNumber;
  7816.         CC_BYTE_PAIR                 Lines[CC_MAX_HW_DECODE_LINES];
  7817.     } CC_HW_FIELD, *PCC_HW_FIELD;
  7818.  
  7819.     ///////////////////////////////////////////////////////////////////
  7820.     // Raw NABTS stream format (TYPE_NABTS, SUBTYPE_NABTS)
  7821.     ///////////////////////////////////////////////////////////////////
  7822.  
  7823.     // These low-level structures are byte packed( -Zp1 )
  7824.     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  7825.     #include <pshpack1.h>
  7826.     #endif
  7827.     typedef struct _NABTS_BUFFER_LINE {
  7828.         BYTE                            Confidence;
  7829.         BYTE                            Bytes[NABTS_BYTES_PER_LINE];
  7830.     } NABTS_BUFFER_LINE, *PNABTS_BUFFER_LINE;
  7831.  
  7832.     #define NABTS_BUFFER_PICTURENUMBER_SUPPORT 1
  7833.     typedef struct _NABTS_BUFFER {
  7834.         VBICODECFILTERING_SCANLINES     ScanlinesRequested;
  7835.         LONGLONG                        PictureNumber;
  7836.         NABTS_BUFFER_LINE               NabtsLines[MAX_NABTS_VBI_LINES_PER_FIELD];
  7837.     } NABTS_BUFFER, *PNABTS_BUFFER;
  7838.     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  7839.     #include <poppack.h>
  7840.     #endif
  7841.  
  7842.     //
  7843.     // Common codec statistics
  7844.     //
  7845.  
  7846.     typedef struct _VBICODECFILTERING_STATISTICS_COMMON {
  7847.         DWORD   InputSRBsProcessed;         // upstream SRBs received
  7848.         DWORD   OutputSRBsProcessed;        // downstream SRBs sent
  7849.         DWORD   SRBsIgnored;                // SRBs ignored due to no requests
  7850.         DWORD   InputSRBsMissing;           // SRBs dropped upstream
  7851.         DWORD   OutputSRBsMissing;          // Output dropped because no SRB pending
  7852.         DWORD   OutputFailures;             // dropped because of other failure
  7853.         DWORD   InternalErrors;             // could not process due to int. failure
  7854.         DWORD   ExternalErrors;             // could not process due to ext. failure
  7855.         DWORD   InputDiscontinuities;       // discontinuities received
  7856.         DWORD   DSPFailures;                // DSP confidence failure
  7857.         DWORD   TvTunerChanges;             // number of received KS_TVTUNER_CHANGE_BEGIN_TUNE and KS_TVTUNER_CHANGE_END_TUNE pairs.
  7858.         DWORD   VBIHeaderChanges;           // number of received KS_VBI_FLAG_VBIINFOHEADER_CHANGE
  7859.         DWORD   LineConfidenceAvg;          // Average of all DSP confidence results
  7860.         DWORD   BytesOutput;                // Bytes sent downstream
  7861.     } VBICODECFILTERING_STATISTICS_COMMON, *PVBICODECFILTERING_STATISTICS_COMMON;
  7862.  
  7863.     typedef struct _VBICODECFILTERING_STATISTICS_COMMON_PIN {
  7864.         DWORD   SRBsProcessed;              // SRBs sent/received
  7865.         DWORD   SRBsIgnored;                // SRBs ignored due to filtering
  7866.         DWORD   SRBsMissing;                // SRBs not sent/received
  7867.         DWORD   InternalErrors;             // could not send/receive due to int. failure
  7868.         DWORD   ExternalErrors;             // could not send/receive due to ext. failure
  7869.         DWORD   Discontinuities;            // discontinuities received/sent
  7870.         DWORD   LineConfidenceAvg;          // Average of all DSP confidence results for this pin
  7871.         DWORD   BytesOutput;                // Bytes sent downstream
  7872.     } VBICODECFILTERING_STATISTICS_COMMON_PIN, *PVBICODECFILTERING_STATISTICS_COMMON_PIN;
  7873.  
  7874.     //
  7875.     // Codec-specific statistics - NABTS
  7876.     //
  7877.  
  7878.     typedef struct _VBICODECFILTERING_STATISTICS_NABTS {
  7879.         VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
  7880.         DWORD   FECBundleBadLines;          // Un-FEC-correctable lines
  7881.         DWORD   FECQueueOverflows;          // Number of times FEC queue overflowed
  7882.         DWORD   FECCorrectedLines;          // Lines CSUM corrected by FEC
  7883.         DWORD   FECUncorrectableLines;      // FEC input lines not CSUM correctable
  7884.         DWORD   BundlesProcessed;           // Bundles received from FEC
  7885.         DWORD   BundlesSent2IP;             // Bundles sent to IP driver
  7886.         DWORD   FilteredLines;              // Lines processed and then dropped
  7887.                                             // because no one was interested
  7888.     } VBICODECFILTERING_STATISTICS_NABTS, *PVBICODECFILTERING_STATISTICS_NABTS;
  7889.  
  7890.     typedef struct _VBICODECFILTERING_STATISTICS_NABTS_PIN {
  7891.         VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
  7892.     } VBICODECFILTERING_STATISTICS_NABTS_PIN, *PVBICODECFILTERING_STATISTICS_NABTS_PIN;
  7893.  
  7894.     //
  7895.     // Codec-specific statistics - Closed Caption
  7896.     //
  7897.  
  7898.     typedef struct _VBICODECFILTERING_STATISTICS_CC {
  7899.         VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
  7900.     } VBICODECFILTERING_STATISTICS_CC, *PVBICODECFILTERING_STATISTICS_CC;
  7901.  
  7902.  
  7903.     typedef struct _VBICODECFILTERING_STATISTICS_CC_PIN {
  7904.         VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
  7905.     } VBICODECFILTERING_STATISTICS_CC_PIN, *PVBICODECFILTERING_STATISTICS_CC_PIN;
  7906.  
  7907.     ////////////////////////////////////////////////////////////////////////////
  7908.     // VBI codec property structures(based on KSPROPERTY_VBICODECFILTERING enum)
  7909.     ////////////////////////////////////////////////////////////////////////////
  7910.  
  7911.     // *** Most codecs support this property
  7912.     //    KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY
  7913.     //    KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  7914.     typedef struct {
  7915.         KSPROPERTY                          Property;
  7916.         VBICODECFILTERING_SCANLINES         Scanlines;
  7917.     } KSPROPERTY_VBICODECFILTERING_SCANLINES_S, *PKSPROPERTY_VBICODECFILTERING_SCANLINES_S;
  7918.  
  7919.     // *** NABTS codecs support this property
  7920.     //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  7921.     //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  7922.     typedef struct {
  7923.         KSPROPERTY                          Property;
  7924.         VBICODECFILTERING_NABTS_SUBSTREAMS  Substreams;
  7925.     } KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S;
  7926.  
  7927.     // *** Closed captioning codecs support this property
  7928.     //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  7929.     //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  7930.     typedef struct {
  7931.         KSPROPERTY                              Property;
  7932.         VBICODECFILTERING_CC_SUBSTREAMS         Substreams;
  7933.     } KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S;
  7934.  
  7935.     // *** Most codecs support these versions of the global and pin properties
  7936.     //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  7937.     typedef struct {
  7938.         KSPROPERTY                              Property;
  7939.         VBICODECFILTERING_STATISTICS_COMMON     Statistics;
  7940.     } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S;
  7941.  
  7942.     typedef struct {
  7943.         KSPROPERTY                              Property;
  7944.         VBICODECFILTERING_STATISTICS_COMMON_PIN Statistics;
  7945.     } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S;
  7946.  
  7947.     // *** NABTS codecs support this version of the global and pin properties
  7948.     //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  7949.     typedef struct {
  7950.         KSPROPERTY                              Property;
  7951.         VBICODECFILTERING_STATISTICS_NABTS      Statistics;
  7952.     } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S;
  7953.  
  7954.     typedef struct {
  7955.         KSPROPERTY                              Property;
  7956.         VBICODECFILTERING_STATISTICS_NABTS_PIN  Statistics;
  7957.     } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S;
  7958.  
  7959.     // *** Closed captioning codecs support this version of the global and pin properties
  7960.     //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  7961.  
  7962.     typedef struct {
  7963.         KSPROPERTY                              Property;
  7964.         VBICODECFILTERING_STATISTICS_CC         Statistics;
  7965.     } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S;
  7966.  
  7967.     typedef struct {
  7968.         KSPROPERTY                              Property;
  7969.         VBICODECFILTERING_STATISTICS_CC_PIN     Statistics;
  7970.     } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S;
  7971.  
  7972.     // Standard Pin Names for the video capture filter
  7973.     //===========================================================================
  7974.  
  7975.     #define STATIC_PINNAME_VIDEO_CAPTURE \
  7976.         0xfb6c4281, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  7977.     #define STATIC_PINNAME_CAPTURE STATIC_PINNAME_VIDEO_CAPTURE
  7978.     DEFINE_GUIDSTRUCT("FB6C4281-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CAPTURE);
  7979.     #define PINNAME_VIDEO_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CAPTURE)
  7980.     #define PINNAME_CAPTURE PINNAME_VIDEO_CAPTURE
  7981.  
  7982.     #define STATIC_PINNAME_VIDEO_CC_CAPTURE \
  7983.         0x1aad8061, 0x12d, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
  7984.     #define STATIC_PINNAME_CC_CAPTURE STATIC_PINNAME_VIDEO_CC_CAPTURE
  7985.     DEFINE_GUIDSTRUCT("1AAD8061-012D-11d2-B4B1-00A0D102CFBE", PINNAME_VIDEO_CC_CAPTURE);
  7986.     #define PINNAME_VIDEO_CC_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CC_CAPTURE)
  7987.  
  7988.     #define STATIC_PINNAME_VIDEO_NABTS_CAPTURE \
  7989.         0x29703660, 0x498a, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
  7990.     #define STATIC_PINNAME_NABTS_CAPTURE STATIC_PINNAME_VIDEO_NABTS_CAPTURE
  7991.     DEFINE_GUIDSTRUCT("29703660-498A-11d2-B4B1-00A0D102CFBE", PINNAME_VIDEO_NABTS_CAPTURE);
  7992.     #define PINNAME_VIDEO_NABTS_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS_CAPTURE)
  7993.  
  7994.     #define STATIC_PINNAME_VIDEO_PREVIEW \
  7995.         0xfb6c4282, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  7996.     #define STATIC_PINNAME_PREVIEW STATIC_PINNAME_VIDEO_PREVIEW
  7997.     DEFINE_GUIDSTRUCT("FB6C4282-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_PREVIEW);
  7998.     #define PINNAME_VIDEO_PREVIEW DEFINE_GUIDNAMED(PINNAME_VIDEO_PREVIEW)
  7999.     #define PINNAME_PREVIEW PINNAME_VIDEO_PREVIEW
  8000.  
  8001.     #define STATIC_PINNAME_VIDEO_ANALOGVIDEOIN \
  8002.         0xfb6c4283, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8003.     DEFINE_GUIDSTRUCT("FB6C4283-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_ANALOGVIDEOIN);
  8004.     #define PINNAME_VIDEO_ANALOGVIDEOIN DEFINE_GUIDNAMED(PINNAME_VIDEO_ANALOGVIDEOIN)
  8005.  
  8006.     #define STATIC_PINNAME_VIDEO_VBI \
  8007.         0xfb6c4284, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8008.     DEFINE_GUIDSTRUCT("FB6C4284-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VBI);
  8009.     #define PINNAME_VIDEO_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VBI)
  8010.  
  8011.     #define STATIC_PINNAME_VIDEO_VIDEOPORT \
  8012.         0xfb6c4285, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8013.     DEFINE_GUIDSTRUCT("FB6C4285-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT);
  8014.     #define PINNAME_VIDEO_VIDEOPORT DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT)
  8015.  
  8016.     #define STATIC_PINNAME_VIDEO_NABTS \
  8017.         0xfb6c4286, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8018.     DEFINE_GUIDSTRUCT("FB6C4286-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_NABTS);
  8019.     #define PINNAME_VIDEO_NABTS DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS)
  8020.  
  8021.     #define STATIC_PINNAME_VIDEO_EDS \
  8022.         0xfb6c4287, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8023.     DEFINE_GUIDSTRUCT("FB6C4287-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_EDS);
  8024.     #define PINNAME_VIDEO_EDS DEFINE_GUIDNAMED(PINNAME_VIDEO_EDS)
  8025.  
  8026.     #define STATIC_PINNAME_VIDEO_TELETEXT \
  8027.         0xfb6c4288, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8028.     DEFINE_GUIDSTRUCT("FB6C4288-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TELETEXT);
  8029.     #define PINNAME_VIDEO_TELETEXT DEFINE_GUIDNAMED(PINNAME_VIDEO_TELETEXT)
  8030.  
  8031.     #define STATIC_PINNAME_VIDEO_CC \
  8032.         0xfb6c4289, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8033.     DEFINE_GUIDSTRUCT("FB6C4289-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CC);
  8034.     #define PINNAME_VIDEO_CC DEFINE_GUIDNAMED(PINNAME_VIDEO_CC)
  8035.  
  8036.     #define STATIC_PINNAME_VIDEO_STILL \
  8037.         0xfb6c428A, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8038.     DEFINE_GUIDSTRUCT("FB6C428A-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_STILL);
  8039.     #define PINNAME_VIDEO_STILL DEFINE_GUIDNAMED(PINNAME_VIDEO_STILL)
  8040.  
  8041.     #define STATIC_PINNAME_VIDEO_TIMECODE \
  8042.         0xfb6c428B, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8043.     DEFINE_GUIDSTRUCT("FB6C428B-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TIMECODE);
  8044.     #define PINNAME_VIDEO_TIMECODE DEFINE_GUIDNAMED(PINNAME_VIDEO_TIMECODE)
  8045.  
  8046.     #define STATIC_PINNAME_VIDEO_VIDEOPORT_VBI \
  8047.         0xfb6c428C, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8048.     DEFINE_GUIDSTRUCT("FB6C428C-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT_VBI);
  8049.     #define PINNAME_VIDEO_VIDEOPORT_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT_VBI)
  8050.  
  8051.     //===========================================================================
  8052.     // KSSTREAM_HEADER extensions for digital video
  8053.     //===========================================================================
  8054.  
  8055.     #define KS_VIDEO_FLAG_FRAME      0x0000L        // Frame or Field (default is frame)
  8056.     #define KS_VIDEO_FLAG_FIELD1     0x0001L
  8057.     #define KS_VIDEO_FLAG_FIELD2     0x0002L
  8058.  
  8059.     #define KS_VIDEO_FLAG_I_FRAME    0x0000L        // I, B, or P (default is I)
  8060.     #define KS_VIDEO_FLAG_P_FRAME    0x0010L
  8061.     #define KS_VIDEO_FLAG_B_FRAME    0x0020L
  8062.  
  8063.     typedef struct tagKS_FRAME_INFO {
  8064.         ULONG                   ExtendedHeaderSize; // Size of this extended header
  8065.         DWORD                   dwFrameFlags;       // Field1, Field2, or Frame
  8066.         LONGLONG                PictureNumber;
  8067.         LONGLONG                DropCount;
  8068.  
  8069.         // The following are only set when using OverlayMixer
  8070.         HANDLE                  hDirectDraw;        // user mode DDraw handle
  8071.         HANDLE                  hSurfaceHandle;     // user mode surface handle
  8072.         RECT                    DirectDrawRect;     // portion of surface locked
  8073.         // Reserved fields, never reference these
  8074.         DWORD                   Reserved1;
  8075.         DWORD                   Reserved2;
  8076.         DWORD                   Reserved3;
  8077.         DWORD                   Reserved4;
  8078.     } KS_FRAME_INFO, *PKS_FRAME_INFO;
  8079.  
  8080.     //===========================================================================
  8081.     // KSSTREAM_HEADER extensions for VBI
  8082.     //===========================================================================
  8083.  
  8084.     #define KS_VBI_FLAG_FIELD1               0x0001L
  8085.     #define KS_VBI_FLAG_FIELD2               0x0002L
  8086.  
  8087.     #define KS_VBI_FLAG_MV_PRESENT           0x0100L
  8088.     #define KS_VBI_FLAG_MV_HARDWARE          0x0200L
  8089.     #define KS_VBI_FLAG_MV_DETECTED          0x0400L
  8090.  
  8091.     #define KS_VBI_FLAG_TVTUNER_CHANGE       0x0010L // TvTunerChangeInfo is valid
  8092.     #define KS_VBI_FLAG_VBIINFOHEADER_CHANGE 0x0020L // VBIInfoHeader is valid
  8093.  
  8094.     typedef struct tagKS_VBI_FRAME_INFO {
  8095.         ULONG                   ExtendedHeaderSize; // Size of this extended header
  8096.         DWORD                   dwFrameFlags;  // Field1, Field2, or Frame; & etc
  8097.         LONGLONG                PictureNumber; // Test only?
  8098.         LONGLONG                DropCount;     // Test only?
  8099.         DWORD                   dwSamplingFrequency;
  8100.         KS_TVTUNER_CHANGE_INFO  TvTunerChangeInfo;
  8101.         KS_VBIINFOHEADER        VBIInfoHeader;
  8102.     } KS_VBI_FRAME_INFO, *PKS_VBI_FRAME_INFO;
  8103.  
  8104.  
  8105.     //===========================================================================
  8106.     // Analog video formats, used with:
  8107.     //      Analog Video Decoders
  8108.     //      TVTuners
  8109.     //      Analog Video Encoders
  8110.     //
  8111.     // XXX_STANDARDS_SUPPORTED returns a bitmask
  8112.     //===========================================================================
  8113.  
  8114.     typedef enum
  8115.     {
  8116.         KS_AnalogVideo_None     = 0x00000000,  // This is a digital sensor
  8117.         KS_AnalogVideo_NTSC_M   = 0x00000001,  //        75 IRE Setup
  8118.         KS_AnalogVideo_NTSC_M_J = 0x00000002,  // Japan,  0 IRE Setup
  8119.         KS_AnalogVideo_NTSC_433 = 0x00000004,
  8120.  
  8121.         KS_AnalogVideo_PAL_B    = 0x00000010,
  8122.         KS_AnalogVideo_PAL_D    = 0x00000020,
  8123.         KS_AnalogVideo_PAL_G    = 0x00000040,
  8124.         KS_AnalogVideo_PAL_H    = 0x00000080,
  8125.         KS_AnalogVideo_PAL_I    = 0x00000100,
  8126.         KS_AnalogVideo_PAL_M    = 0x00000200,
  8127.         KS_AnalogVideo_PAL_N    = 0x00000400,
  8128.  
  8129.         KS_AnalogVideo_PAL_60   = 0x00000800,
  8130.  
  8131.         KS_AnalogVideo_SECAM_B  = 0x00001000,
  8132.         KS_AnalogVideo_SECAM_D  = 0x00002000,
  8133.         KS_AnalogVideo_SECAM_G  = 0x00004000,
  8134.         KS_AnalogVideo_SECAM_H  = 0x00008000,
  8135.         KS_AnalogVideo_SECAM_K  = 0x00010000,
  8136.         KS_AnalogVideo_SECAM_K1 = 0x00020000,
  8137.         KS_AnalogVideo_SECAM_L  = 0x00040000,
  8138.         KS_AnalogVideo_SECAM_L1 = 0x00080000,
  8139.  
  8140.         KS_AnalogVideo_PAL_N_COMBO
  8141.                                 = 0x00100000
  8142.     } KS_AnalogVideoStandard;
  8143.  
  8144.     #define KS_AnalogVideo_NTSC_Mask  0x00000007
  8145.     #define KS_AnalogVideo_PAL_Mask   0x00100FF0
  8146.     #define KS_AnalogVideo_SECAM_Mask 0x000FF000
  8147.  
  8148.     //===========================================================================
  8149.     // Property set definitions
  8150.     // The comments show whether a given property is:
  8151.     //      R  : READ only
  8152.     //      w  : WRITE only
  8153.     //      RW : READ / WRITE
  8154.     //      O  : Optional (return E_UNSUPPORTED if you don't handle this)
  8155.     //===========================================================================
  8156.  
  8157.     #define STATIC_PROPSETID_ALLOCATOR_CONTROL\
  8158.         0x53171960, 0x148e, 0x11d2, 0x99, 0x79, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  8159.     DEFINE_GUIDSTRUCT("53171960-148E-11d2-9979-0000C0CC16BA", PROPSETID_ALLOCATOR_CONTROL);
  8160.     #define PROPSETID_ALLOCATOR_CONTROL DEFINE_GUIDNAMED(PROPSETID_ALLOCATOR_CONTROL)
  8161.     typedef enum {
  8162.         KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT,      // R O (will allocate exactly this number of buffers)
  8163.         KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE,     // R O (return 2 DWORDs specifying surface size)
  8164.     } KSPROPERTY_ALLOCATOR_CONTROL;
  8165.  
  8166.  
  8167.     //===========================================================================
  8168.  
  8169.     #define STATIC_PROPSETID_VIDCAP_VIDEOPROCAMP\
  8170.         0xC6E13360L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  8171.     DEFINE_GUIDSTRUCT("C6E13360-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOPROCAMP);
  8172.     #define PROPSETID_VIDCAP_VIDEOPROCAMP DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOPROCAMP)
  8173.  
  8174.     typedef enum {
  8175.         KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS,            // RW O
  8176.         KSPROPERTY_VIDEOPROCAMP_CONTRAST,              // RW O
  8177.         KSPROPERTY_VIDEOPROCAMP_HUE,                   // RW O
  8178.         KSPROPERTY_VIDEOPROCAMP_SATURATION,            // RW O
  8179.         KSPROPERTY_VIDEOPROCAMP_SHARPNESS,             // RW O
  8180.         KSPROPERTY_VIDEOPROCAMP_GAMMA,                 // RW O
  8181.         KSPROPERTY_VIDEOPROCAMP_COLORENABLE,           // RW O
  8182.         KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE,          // RW O
  8183.         KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION,// RW O
  8184.         KSPROPERTY_VIDEOPROCAMP_GAIN,                  // RW O
  8185.     } KSPROPERTY_VIDCAP_VIDEOPROCAMP;
  8186.  
  8187.     typedef struct {
  8188.         KSPROPERTY Property;
  8189.         LONG   Value;                       // Value to set or get
  8190.         ULONG  Flags;                       // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  8191.         ULONG  Capabilities;                // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  8192.     } KSPROPERTY_VIDEOPROCAMP_S, *PKSPROPERTY_VIDEOPROCAMP_S;
  8193.  
  8194.     #define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO        0X0001L
  8195.     #define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL      0X0002L
  8196.  
  8197.     //===========================================================================
  8198.  
  8199.     #define STATIC_PROPSETID_TUNER\
  8200.         0x6a2e0605L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8201.     DEFINE_GUIDSTRUCT("6a2e0605-28e4-11d0-a18c-00a0c9118956", PROPSETID_TUNER);
  8202.     #define PROPSETID_TUNER DEFINE_GUIDNAMED(PROPSETID_TUNER)
  8203.  
  8204.     typedef enum {
  8205.         KSPROPERTY_TUNER_CAPS,              // R  -overall device capabilities
  8206.         KSPROPERTY_TUNER_MODE_CAPS,         // R  -capabilities in this mode
  8207.         KSPROPERTY_TUNER_MODE,              // RW -set a mode (TV, FM, AM, DSS)
  8208.         KSPROPERTY_TUNER_STANDARD,          // R  -get TV standard (only if TV mode)
  8209.         KSPROPERTY_TUNER_FREQUENCY,         // RW -set/get frequency
  8210.         KSPROPERTY_TUNER_INPUT,             // RW -select an input
  8211.         KSPROPERTY_TUNER_STATUS,            // R  -tuning status
  8212.         KSPROPERTY_TUNER_IF_MEDIUM          // R O-Medium for IF or Transport Pin
  8213.     } KSPROPERTY_TUNER;
  8214.  
  8215.     typedef enum {
  8216.         KSPROPERTY_TUNER_MODE_TV            = 0X0001,
  8217.         KSPROPERTY_TUNER_MODE_FM_RADIO      = 0X0002,
  8218.         KSPROPERTY_TUNER_MODE_AM_RADIO      = 0X0004,
  8219.         KSPROPERTY_TUNER_MODE_DSS           = 0X0008,
  8220.         KSPROPERTY_TUNER_MODE_ATSC          = 0X0010,  // also used for DVB-T, DVB-C
  8221.     } KSPROPERTY_TUNER_MODES;
  8222.  
  8223.     // Describes how the device tunes.  Only one of these flags may be set
  8224.     // in KSPROPERTY_TUNER_MODE_CAPS_S.Strategy
  8225.  
  8226.     // Describe how the driver should attempt to tune:
  8227.     // EXACT:   just go to the frequency specified (no fine tuning)
  8228.     // FINE:    (slow) do an exhaustive search for the best signal
  8229.     // COARSE:  (fast) use larger frequency jumps to just determine if any signal
  8230.  
  8231.     typedef enum {
  8232.         KS_TUNER_TUNING_EXACT = 1,        // No fine tuning
  8233.         KS_TUNER_TUNING_FINE,             // Fine grained search
  8234.         KS_TUNER_TUNING_COARSE,           // Coarse search
  8235.     }KS_TUNER_TUNING_FLAGS;
  8236.  
  8237.     typedef enum {
  8238.         KS_TUNER_STRATEGY_PLL             = 0X01, // Tune by PLL offset
  8239.         KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02, // Tune by signal strength
  8240.         KS_TUNER_STRATEGY_DRIVER_TUNES    = 0X04, // Driver does fine tuning
  8241.     }KS_TUNER_STRATEGY;
  8242.  
  8243.     typedef struct {
  8244.         KSPROPERTY Property;
  8245.         ULONG  ModesSupported;              // KS_PROPERTY_TUNER_MODES_*
  8246.         KSPIN_MEDIUM VideoMedium;           // GUID_NULL (no pin), or GUID
  8247.         KSPIN_MEDIUM TVAudioMedium;         // GUID_NULL (no pin), or GUID
  8248.         KSPIN_MEDIUM RadioAudioMedium;      // GUID_NULL (no pin), or GUID
  8249.     } KSPROPERTY_TUNER_CAPS_S, *PKSPROPERTY_TUNER_CAPS_S;
  8250.  
  8251.     typedef struct {
  8252.         KSPROPERTY Property;
  8253.         KSPIN_MEDIUM IFMedium;              // GUID_NULL (no pin), or GUID
  8254.     } KSPROPERTY_TUNER_IF_MEDIUM_S, *PKSPROPERTY_TUNER_IF_MEDIUM_S;
  8255.  
  8256.     typedef struct {
  8257.         KSPROPERTY Property;
  8258.         ULONG  Mode;                        // IN: KSPROPERTY_TUNER_MODE
  8259.         ULONG  StandardsSupported;          // KS_AnalogVideo_* (if TV or DSS)
  8260.         ULONG  MinFrequency;                // Hz
  8261.         ULONG  MaxFrequency;                // Hz
  8262.         ULONG  TuningGranularity;           // Hz
  8263.         ULONG  NumberOfInputs;              // count of inputs
  8264.         ULONG  SettlingTime;                // milliSeconds
  8265.         ULONG  Strategy;                    // KS_TUNER_STRATEGY
  8266.     } KSPROPERTY_TUNER_MODE_CAPS_S, *PKSPROPERTY_TUNER_MODE_CAPS_S;
  8267.  
  8268.     typedef struct {
  8269.         KSPROPERTY Property;
  8270.         ULONG  Mode;                        // IN: KSPROPERTY_TUNER_MODE
  8271.     } KSPROPERTY_TUNER_MODE_S, *PKSPROPERTY_TUNER_MODE_S;
  8272.  
  8273.     typedef struct {
  8274.         KSPROPERTY Property;
  8275.         ULONG  Frequency;                   // Hz
  8276.         ULONG  LastFrequency;               // Hz (last known good)
  8277.         ULONG  TuningFlags;                 // KS_TUNER_TUNING_FLAGS
  8278.         ULONG  VideoSubChannel;             // DSS
  8279.         ULONG  AudioSubChannel;             // DSS
  8280.         ULONG  Channel;                     // VBI decoders
  8281.         ULONG  Country;                     // VBI decoders
  8282.     } KSPROPERTY_TUNER_FREQUENCY_S, *PKSPROPERTY_TUNER_FREQUENCY_S;
  8283.  
  8284.     typedef struct {
  8285.         KSPROPERTY Property;
  8286.         ULONG  Standard;                    // KS_AnalogVideo_*
  8287.     } KSPROPERTY_TUNER_STANDARD_S, *PKSPROPERTY_TUNER_STANDARD_S;
  8288.  
  8289.     typedef struct {
  8290.         KSPROPERTY Property;
  8291.         ULONG  InputIndex;                  // 0 to (n-1) inputs
  8292.     } KSPROPERTY_TUNER_INPUT_S, *PKSPROPERTY_TUNER_INPUT_S;
  8293.  
  8294.     typedef struct {
  8295.         KSPROPERTY Property;
  8296.         ULONG  CurrentFrequency;            // Hz
  8297.         ULONG  PLLOffset;                   // if Strategy.KS_TUNER_STRATEGY_PLL
  8298.         ULONG  SignalStrength;              // if Stretegy.KS_TUNER_STRATEGY_SIGNAL_STRENGTH
  8299.         ULONG  Busy;                        // TRUE if in the process of tuning
  8300.     } KSPROPERTY_TUNER_STATUS_S, *PKSPROPERTY_TUNER_STATUS_S;
  8301.  
  8302.     #define STATIC_EVENTSETID_TUNER\
  8303.         0x6a2e0606L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8304.     DEFINE_GUIDSTRUCT("6a2e0606-28e4-11d0-a18c-00a0c9118956", EVENTSETID_TUNER);
  8305.     #define EVENTSETID_TUNER DEFINE_GUIDNAMED(EVENTSETID_TUNER)
  8306.  
  8307.     typedef enum {
  8308.         KSEVENT_TUNER_CHANGED
  8309.     } KSEVENT_TUNER;
  8310.  
  8311.  
  8312.     //===========================================================================
  8313.  
  8314.     #define STATIC_PROPSETID_VIDCAP_VIDEOENCODER\
  8315.         0x6a2e0610L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8316.     DEFINE_GUIDSTRUCT("6a2e0610-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOENCODER);
  8317.     #define PROPSETID_VIDCAP_VIDEOENCODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOENCODER)
  8318.  
  8319.     typedef enum {
  8320.         KSPROPERTY_VIDEOENCODER_CAPS,                       // R
  8321.         KSPROPERTY_VIDEOENCODER_STANDARD,                   // RW
  8322.         KSPROPERTY_VIDEOENCODER_COPYPROTECTION,             // RW O
  8323.         KSPROPERTY_VIDEOENCODER_CC_ENABLE,                  // RW O
  8324.     } KSPROPERTY_VIDCAP_VIDEOENCODER;
  8325.  
  8326.     typedef struct {
  8327.         KSPROPERTY Property;
  8328.         LONG       Value;                   // value to get or set
  8329.         ULONG      Flags;                   //
  8330.         ULONG      Capabilities;            //
  8331.     } KSPROPERTY_VIDEOENCODER_S, *PKSPROPERTY_VIDEOENCODER_S;
  8332.  
  8333.     //===========================================================================
  8334.  
  8335.     #define STATIC_PROPSETID_VIDCAP_VIDEODECODER\
  8336.         0xC6E13350L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  8337.     DEFINE_GUIDSTRUCT("C6E13350-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEODECODER);
  8338.     #define PROPSETID_VIDCAP_VIDEODECODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEODECODER)
  8339.  
  8340.     typedef enum {
  8341.         KSPROPERTY_VIDEODECODER_CAPS,                       // R
  8342.         KSPROPERTY_VIDEODECODER_STANDARD,                   // RW
  8343.         KSPROPERTY_VIDEODECODER_STATUS,                     // R
  8344.         KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE,              // Rw O
  8345.         KSPROPERTY_VIDEODECODER_VCR_TIMING,                 // RW O
  8346.     } KSPROPERTY_VIDCAP_VIDEODECODER;
  8347.  
  8348.     typedef enum {
  8349.         KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT  = 0X0001, // VP Output can tri-stae
  8350.         KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = 0X0002, // VCR PLL timings
  8351.         KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = 0X0004, // Can indicate valid signal
  8352.     }KS_VIDEODECODER_FLAGS;
  8353.  
  8354.     typedef struct {
  8355.         KSPROPERTY Property;
  8356.         ULONG      StandardsSupported;      // KS_AnalogVideo_*
  8357.         ULONG      Capabilities;            // KS_VIDEODECODER_FLAGS_*
  8358.         ULONG      SettlingTime;            // milliseconds
  8359.         ULONG      HSyncPerVSync;           // Number of HSync Pulses per VSync
  8360.     } KSPROPERTY_VIDEODECODER_CAPS_S, *PKSPROPERTY_VIDEODECODER_CAPS_S;
  8361.  
  8362.     typedef struct {
  8363.         KSPROPERTY Property;
  8364.         ULONG      NumberOfLines;           // 525 or 625 lines detected
  8365.         ULONG      SignalLocked;            // TRUE if signal is locked
  8366.     } KSPROPERTY_VIDEODECODER_STATUS_S, *PKSPROPERTY_VIDEODECODER_STATUS_S;
  8367.  
  8368.     typedef struct {
  8369.         KSPROPERTY Property;
  8370.         ULONG      Value;                   // Get or set a value
  8371.     } KSPROPERTY_VIDEODECODER_S, *PKSPROPERTY_VIDEODECODER_S;
  8372.  
  8373.     #define STATIC_EVENTSETID_VIDEODECODER\
  8374.         0x6a2e0621L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8375.     DEFINE_GUIDSTRUCT("6a2e0621-28e4-11d0-a18c-00a0c9118956", EVENTSETID_VIDEODECODER);
  8376.     #define EVENTSETID_VIDEODECODER DEFINE_GUIDNAMED(EVENTSETID_VIDEODECODER)
  8377.  
  8378.     typedef enum {
  8379.         KSEVENT_VIDEODECODER_CHANGED
  8380.     } KSEVENT_VIDEODECODER;
  8381.  
  8382.     //===========================================================================
  8383.  
  8384.     #define STATIC_PROPSETID_VIDCAP_CAMERACONTROL\
  8385.         0xC6E13370L, 0x30AC, 0x11d0, 0xa1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  8386.     DEFINE_GUIDSTRUCT("C6E13370-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_CAMERACONTROL);
  8387.     #define PROPSETID_VIDCAP_CAMERACONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CAMERACONTROL)
  8388.  
  8389.     typedef enum {
  8390.         KSPROPERTY_CAMERACONTROL_PAN,                       // RW O
  8391.         KSPROPERTY_CAMERACONTROL_TILT,                      // RW O
  8392.         KSPROPERTY_CAMERACONTROL_ROLL,                      // RW O
  8393.         KSPROPERTY_CAMERACONTROL_ZOOM,                      // RW O
  8394.         KSPROPERTY_CAMERACONTROL_EXPOSURE,                  // RW O
  8395.         KSPROPERTY_CAMERACONTROL_IRIS,                      // RW O
  8396.         KSPROPERTY_CAMERACONTROL_FOCUS,                     // RW O
  8397.     } KSPROPERTY_VIDCAP_CAMERACONTROL;
  8398.  
  8399.     typedef struct {
  8400.         KSPROPERTY Property;
  8401.         LONG       Value;                   // value to get or set
  8402.         ULONG      Flags;                   // KSPROPERTY_CAMERACONTROL_FLAGS_*
  8403.         ULONG      Capabilities;            // KSPROPERTY_CAMERACONTROL_FLAGS_*
  8404.     } KSPROPERTY_CAMERACONTROL_S, *PKSPROPERTY_CAMERACONTROL_S;
  8405.  
  8406.     #define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO        0X0001L
  8407.     #define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL      0X0002L
  8408.  
  8409.     #define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE    0X0000L
  8410.     #define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE    0X0010L
  8411.  
  8412.  
  8413.     //===========================================================================
  8414.  
  8415.     #define STATIC_PROPSETID_VIDCAP_CROSSBAR\
  8416.         0x6a2e0640L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8417.     DEFINE_GUIDSTRUCT("6a2e0640-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_CROSSBAR);
  8418.     #define PROPSETID_VIDCAP_CROSSBAR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CROSSBAR)
  8419.  
  8420.     typedef enum {
  8421.         KSPROPERTY_CROSSBAR_CAPS,                     // R
  8422.         KSPROPERTY_CROSSBAR_PININFO,                  // R
  8423.         KSPROPERTY_CROSSBAR_CAN_ROUTE,                // R
  8424.         KSPROPERTY_CROSSBAR_ROUTE,                    // RW
  8425.     } KSPROPERTY_VIDCAP_CROSSBAR;
  8426.  
  8427.     typedef struct {
  8428.         KSPROPERTY Property;
  8429.         ULONG  NumberOfInputs;      // the number of audio and video input pins
  8430.         ULONG  NumberOfOutputs;     // the number of audio and video output pins
  8431.     } KSPROPERTY_CROSSBAR_CAPS_S, *PKSPROPERTY_CROSSBAR_CAPS_S;
  8432.  
  8433.     typedef struct {
  8434.         KSPROPERTY Property;
  8435.         KSPIN_DATAFLOW Direction;     // KSPIN_DATAFLOW_IN or KSPIN_DATAFLOW_OUT?
  8436.         ULONG  Index;                 // Which pin to return data for?
  8437.         ULONG  PinType;               // KS_PhysConn_Video_* or KS_PhysConn_Audio_*
  8438.         ULONG  RelatedPinIndex;       // For video pins, this is the related audio pin
  8439.         KSPIN_MEDIUM  Medium;         // Identifies the hardware connection
  8440.     } KSPROPERTY_CROSSBAR_PININFO_S, *PKSPROPERTY_CROSSBAR_PININFO_S;
  8441.  
  8442.     typedef struct {
  8443.         KSPROPERTY Property;
  8444.         ULONG  IndexInputPin;        // Zero based index of the input pin
  8445.         ULONG  IndexOutputPin;       // Zero based index of the output pin
  8446.         ULONG  CanRoute;             // returns non-zero on CAN_ROUTE if routing is possible
  8447.     } KSPROPERTY_CROSSBAR_ROUTE_S, *PKSPROPERTY_CROSSBAR_ROUTE_S;
  8448.  
  8449.     #define STATIC_EVENTSETID_CROSSBAR\
  8450.         0x6a2e0641L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8451.     DEFINE_GUIDSTRUCT("6a2e0641-28e4-11d0-a18c-00a0c9118956", EVENTSETID_CROSSBAR);
  8452.     #define EVENTSETID_CROSSBAR DEFINE_GUIDNAMED(EVENTSETID_CROSSBAR)
  8453.  
  8454.     typedef enum {
  8455.         KSEVENT_CROSSBAR_CHANGED
  8456.     } KSEVENT_CROSSBAR;
  8457.  
  8458.     // The following IDs should match the AM equivalents
  8459.     typedef enum {
  8460.         KS_PhysConn_Video_Tuner = 1,
  8461.         KS_PhysConn_Video_Composite,
  8462.         KS_PhysConn_Video_SVideo,
  8463.         KS_PhysConn_Video_RGB,
  8464.         KS_PhysConn_Video_YRYBY,
  8465.         KS_PhysConn_Video_SerialDigital,
  8466.         KS_PhysConn_Video_ParallelDigital,
  8467.         KS_PhysConn_Video_SCSI,
  8468.         KS_PhysConn_Video_AUX,
  8469.         KS_PhysConn_Video_1394,
  8470.         KS_PhysConn_Video_USB,
  8471.         KS_PhysConn_Video_VideoDecoder,
  8472.         KS_PhysConn_Video_VideoEncoder,
  8473.         KS_PhysConn_Video_SCART,
  8474.  
  8475.         KS_PhysConn_Audio_Tuner = 4096,
  8476.         KS_PhysConn_Audio_Line,
  8477.         KS_PhysConn_Audio_Mic,
  8478.         KS_PhysConn_Audio_AESDigital,
  8479.         KS_PhysConn_Audio_SPDIFDigital,
  8480.         KS_PhysConn_Audio_SCSI,
  8481.         KS_PhysConn_Audio_AUX,
  8482.         KS_PhysConn_Audio_1394,
  8483.         KS_PhysConn_Audio_USB,
  8484.         KS_PhysConn_Audio_AudioDecoder,
  8485.     } KS_PhysicalConnectorType;
  8486.  
  8487.  
  8488.     //===========================================================================
  8489.  
  8490.     #define STATIC_PROPSETID_VIDCAP_TVAUDIO\
  8491.         0x6a2e0650L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8492.     DEFINE_GUIDSTRUCT("6a2e0650-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_TVAUDIO);
  8493.     #define PROPSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(PROPSETID_VIDCAP_TVAUDIO)
  8494.  
  8495.     typedef enum {
  8496.         KSPROPERTY_TVAUDIO_CAPS,                            // R
  8497.         KSPROPERTY_TVAUDIO_MODE,                            // RW
  8498.         KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES        // R
  8499.     } KSPROPERTY_VIDCAP_TVAUDIO;
  8500.  
  8501.     #define KS_TVAUDIO_MODE_MONO           0x0001          // Mono
  8502.     #define KS_TVAUDIO_MODE_STEREO         0x0002          // Stereo
  8503.     #define KS_TVAUDIO_MODE_LANG_A         0x0010          // Primary language
  8504.     #define KS_TVAUDIO_MODE_LANG_B         0x0020          // 2nd avail language
  8505.     #define KS_TVAUDIO_MODE_LANG_C         0x0040          // 3rd avail language
  8506.  
  8507.     typedef struct {
  8508.         KSPROPERTY Property;
  8509.         ULONG      Capabilities;             // Bitmask of KS_TVAUDIO_MODE_*
  8510.         KSPIN_MEDIUM InputMedium;
  8511.         KSPIN_MEDIUM OutputMedium;
  8512.     } KSPROPERTY_TVAUDIO_CAPS_S, *PKSPROPERTY_TVAUDIO_CAPS_S;
  8513.  
  8514.     typedef struct {
  8515.         KSPROPERTY Property;
  8516.         ULONG      Mode;                     // KS_TVAUDIO_MODE_*
  8517.     } KSPROPERTY_TVAUDIO_S, *PKSPROPERTY_TVAUDIO_S;
  8518.  
  8519.  
  8520.     #define STATIC_KSEVENTSETID_VIDCAP_TVAUDIO\
  8521.         0x6a2e0651L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8522.     DEFINE_GUIDSTRUCT("6a2e0651-28e4-11d0-a18c-00a0c9118956", KSEVENTSETID_VIDCAP_TVAUDIO);
  8523.     #define KSEVENTSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAP_TVAUDIO)
  8524.  
  8525.     typedef enum {
  8526.         KSEVENT_TVAUDIO_CHANGED,
  8527.     } KSEVENT_TVAUDIO;
  8528.  
  8529.     //===========================================================================
  8530.     #define STATIC_PROPSETID_VIDCAP_VIDEOCOMPRESSION\
  8531.         0xC6E13343L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  8532.     DEFINE_GUIDSTRUCT("C6E13343-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOCOMPRESSION);
  8533.     #define PROPSETID_VIDCAP_VIDEOCOMPRESSION DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCOMPRESSION)
  8534.  
  8535.     typedef enum {
  8536.         KSPROPERTY_VIDEOCOMPRESSION_GETINFO,              // R
  8537.         KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE,        // RW
  8538.         KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME, // RW
  8539.         KSPROPERTY_VIDEOCOMPRESSION_QUALITY,              // RW
  8540.         KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME,    // W
  8541.         KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE,  // W
  8542.         KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE,           // RW
  8543.     } KSPROPERTY_VIDCAP_VIDEOCOMPRESSION;
  8544.  
  8545.     typedef enum {
  8546.         KS_CompressionCaps_CanQuality = 1,
  8547.         KS_CompressionCaps_CanCrunch = 2,
  8548.         KS_CompressionCaps_CanKeyFrame = 4,
  8549.         KS_CompressionCaps_CanBFrame = 8,
  8550.         KS_CompressionCaps_CanWindow = 0x10,
  8551.     } KS_CompressionCaps;
  8552.  
  8553.     typedef struct {
  8554.         KSPROPERTY Property;
  8555.         // Note, no VersionString!
  8556.         // Note, no DescriptionString!
  8557.         ULONG      StreamIndex;             // zero based index of stream
  8558.         LONG       DefaultKeyFrameRate;     // Key frame rate
  8559.         LONG       DefaultPFrameRate;       // Predeicted frames per Key frame
  8560.         LONG       DefaultQuality;          // 0 to 10000
  8561.         LONG       NumberOfQualitySettings; // How many discreet quality settings?
  8562.         LONG       Capabilities;            // KS_CompressionCaps_*
  8563.     } KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S, *PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S;
  8564.  
  8565.     typedef struct {
  8566.         KSPROPERTY Property;
  8567.         ULONG      StreamIndex;             // zero based index of stream
  8568.         LONG       Value;                   // value to get or set
  8569.     } KSPROPERTY_VIDEOCOMPRESSION_S, *PKSPROPERTY_VIDEOCOMPRESSION_S;
  8570.  
  8571.     //===========================================================================
  8572.     // MEDIASUBTYPE_Overlay
  8573.     #define STATIC_KSDATAFORMAT_SUBTYPE_OVERLAY\
  8574.         0xe436eb7fL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  8575.     DEFINE_GUIDSTRUCT("e436eb7f-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_OVERLAY);
  8576.     #define KSDATAFORMAT_SUBTYPE_OVERLAY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_OVERLAY)
  8577.  
  8578.     #define STATIC_KSPROPSETID_OverlayUpdate\
  8579.         0x490EA5CFL, 0x7681, 0x11D1, 0xA2, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  8580.     DEFINE_GUIDSTRUCT("490EA5CF-7681-11D1-A21C-00A0C9223196", KSPROPSETID_OverlayUpdate);
  8581.     #define KSPROPSETID_OverlayUpdate DEFINE_GUIDNAMED(KSPROPSETID_OverlayUpdate)
  8582.  
  8583.     typedef enum {
  8584.         KSPROPERTY_OVERLAYUPDATE_INTERESTS,
  8585.         KSPROPERTY_OVERLAYUPDATE_CLIPLIST = 0x1,
  8586.         KSPROPERTY_OVERLAYUPDATE_PALETTE = 0x2,
  8587.         KSPROPERTY_OVERLAYUPDATE_COLORKEY = 0x4,
  8588.         KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = 0x8,
  8589.         KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = 0x10,
  8590.         KSPROPERTY_OVERLAYUPDATE_COLORREF = 0x10000000
  8591.     } KSPROPERTY_OVERLAYUPDATE;
  8592.  
  8593.     typedef struct {
  8594.         ULONG   PelsWidth;
  8595.         ULONG   PelsHeight;
  8596.         ULONG   BitsPerPel;
  8597.         WCHAR   DeviceID[1];
  8598.     } KSDISPLAYCHANGE, *PKSDISPLAYCHANGE;
  8599.  
  8600.     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler)\
  8601.         DEFINE_KSPROPERTY_ITEM(\
  8602.             KSPROPERTY_OVERLAYUPDATE_INTERESTS,\
  8603.             (Handler),\
  8604.             sizeof(KSPROPERTY),\
  8605.             sizeof(ULONG),\
  8606.             NULL, NULL, 0, NULL, NULL, 0)
  8607.  
  8608.     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler)\
  8609.         DEFINE_KSPROPERTY_ITEM(\
  8610.             KSPROPERTY_OVERLAYUPDATE_PALETTE,\
  8611.             NULL,\
  8612.             sizeof(KSPROPERTY),\
  8613.             0,\
  8614.             (Handler),\
  8615.             NULL, 0, NULL, NULL, 0)
  8616.  
  8617.     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler)\
  8618.         DEFINE_KSPROPERTY_ITEM(\
  8619.             KSPROPERTY_OVERLAYUPDATE_COLORKEY,\
  8620.             NULL,\
  8621.             sizeof(KSPROPERTY),\
  8622.             sizeof(COLORKEY),\
  8623.             (Handler),\
  8624.             NULL, 0, NULL, NULL, 0)
  8625.  
  8626.     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler)\
  8627.         DEFINE_KSPROPERTY_ITEM(\
  8628.             KSPROPERTY_OVERLAYUPDATE_CLIPLIST,\
  8629.             NULL,\
  8630.             sizeof(KSPROPERTY),\
  8631.             2 * sizeof(RECT) + sizeof(RGNDATAHEADER),\
  8632.             (Handler),\
  8633.             NULL, 0, NULL, NULL, 0)
  8634.  
  8635.     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler)\
  8636.         DEFINE_KSPROPERTY_ITEM(\
  8637.             KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION,\
  8638.             NULL,\
  8639.             sizeof(KSPROPERTY),\
  8640.             2 * sizeof(RECT),\
  8641.             (Handler),\
  8642.             NULL, 0, NULL, NULL, 0)
  8643.  
  8644.     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler)\
  8645.         DEFINE_KSPROPERTY_ITEM(\
  8646.             KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE,\
  8647.             NULL,\
  8648.             sizeof(KSPROPERTY),\
  8649.             sizeof(KSDISPLAYCHANGE),\
  8650.             (Handler),\
  8651.             NULL, 0, NULL, NULL, 0)
  8652.  
  8653.     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler)\
  8654.         DEFINE_KSPROPERTY_ITEM(\
  8655.             KSPROPERTY_OVERLAYUPDATE_COLORREF,\
  8656.             (Handler),\
  8657.             sizeof(KSPROPERTY),\
  8658.             sizeof(COLORREF),\
  8659.             NULL,\
  8660.             NULL, 0, NULL, NULL, 0)
  8661.  
  8662.     //===========================================================================
  8663.     #define STATIC_PROPSETID_VIDCAP_VIDEOCONTROL\
  8664.         0x6a2e0670L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8665.     DEFINE_GUIDSTRUCT("6a2e0670-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOCONTROL);
  8666.     #define PROPSETID_VIDCAP_VIDEOCONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCONTROL)
  8667.  
  8668.     typedef enum {
  8669.         KSPROPERTY_VIDEOCONTROL_CAPS,               // R
  8670.         KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE,  // R O
  8671.         KSPROPERTY_VIDEOCONTROL_FRAME_RATES,        // R O
  8672.         KSPROPERTY_VIDEOCONTROL_MODE,               // RWO
  8673.     } KSPROPERTY_VIDCAP_VIDEOCONTROL;
  8674.  
  8675.     typedef enum {
  8676.         KS_VideoControlFlag_FlipHorizontal        = 0x0001,
  8677.         KS_VideoControlFlag_FlipVertical          = 0x0002,
  8678.         KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = 0x0010,    // ***WARNING *** Flag msimatch with DSHOW.
  8679.         KS_Obsolete_VideoControlFlag_Trigger               = 0x0020,  // ***WARNING *** Flag msimatch with DSHOW.
  8680.         KS_VideoControlFlag_ExternalTriggerEnable = 0x0004,
  8681.         KS_VideoControlFlag_Trigger                      = 0x0008,
  8682.     } KS_VideoControlFlags;
  8683.  
  8684.     typedef struct {
  8685.         KSPROPERTY Property;
  8686.         ULONG      StreamIndex;
  8687.         ULONG      VideoControlCaps;                // KS_VideoControlFlags_*
  8688.     } KSPROPERTY_VIDEOCONTROL_CAPS_S, *PKSPROPERTY_VIDEOCONTROL_CAPS_S;
  8689.  
  8690.     typedef struct {
  8691.         KSPROPERTY Property;
  8692.         ULONG      StreamIndex;
  8693.         LONG       Mode;                            // KS_VideoControlFlags_*
  8694.     } KSPROPERTY_VIDEOCONTROL_MODE_S, *PKSPROPERTY_VIDEOCONTROL_MODE_S;
  8695.  
  8696.     typedef struct {
  8697.         KSPROPERTY Property;
  8698.         ULONG      StreamIndex;                     // Index of stream
  8699.         ULONG      RangeIndex;                      // Index of range
  8700.         SIZE       Dimensions;                      // Size of image
  8701.         LONGLONG   CurrentActualFrameRate;          // Only correct if pin is open
  8702.         LONGLONG   CurrentMaxAvailableFrameRate;    // Max Rate temporarily limited on USB or 1394?
  8703.     } KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S, *PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S;
  8704.  
  8705.     // KSPROPERTY_VIDEOCONTROL_FRAME_RATES returns a list of available frame rates in 100 nS units
  8706.     typedef struct {
  8707.         KSPROPERTY Property;
  8708.         ULONG      StreamIndex;                     // Index of stream
  8709.         ULONG      RangeIndex;                      // Index of range
  8710.         SIZE       Dimensions;                      // Size of image
  8711.     } KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S, *PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S;
  8712.  
  8713.     //===========================================================================
  8714.     #define STATIC_PROPSETID_VIDCAP_DROPPEDFRAMES\
  8715.         0xC6E13344L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  8716.     DEFINE_GUIDSTRUCT("C6E13344-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_DROPPEDFRAMES);
  8717.     #define PROPSETID_VIDCAP_DROPPEDFRAMES DEFINE_GUIDNAMED(PROPSETID_VIDCAP_DROPPEDFRAMES)
  8718.  
  8719.     typedef enum {
  8720.         KSPROPERTY_DROPPEDFRAMES_CURRENT            // R
  8721.     } KSPROPERTY_VIDCAP_DROPPEDFRAMES;
  8722.  
  8723.     typedef struct {
  8724.         KSPROPERTY Property;
  8725.         LONGLONG   PictureNumber;                   // Current Picture Number
  8726.         LONGLONG   DropCount;                       // Count of frames dropped
  8727.         ULONG      AverageFrameSize;                // Average size of frames captured
  8728.     } KSPROPERTY_DROPPEDFRAMES_CURRENT_S, *PKSPROPERTY_DROPPEDFRAMES_CURRENT_S;
  8729.  
  8730.     //===========================================================================
  8731.     // VPE
  8732.  
  8733.     #define STATIC_KSPROPSETID_VPConfig\
  8734.         0xbc29a660L, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b
  8735.     DEFINE_GUIDSTRUCT("bc29a660-30e3-11d0-9e69-00c04fd7c15b", KSPROPSETID_VPConfig);
  8736.     #define KSPROPSETID_VPConfig DEFINE_GUIDNAMED(KSPROPSETID_VPConfig)
  8737.  
  8738.     #define STATIC_KSPROPSETID_VPVBIConfig\
  8739.         0xec529b00L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  8740.     DEFINE_GUIDSTRUCT("ec529b00-1a1f-11d1-bad9-00609744111a", KSPROPSETID_VPVBIConfig);
  8741.     #define KSPROPSETID_VPVBIConfig DEFINE_GUIDNAMED(KSPROPSETID_VPVBIConfig)
  8742.  
  8743.     // Both of the above property sets use the same list of properties below
  8744.  
  8745.     typedef enum {
  8746.         KSPROPERTY_VPCONFIG_NUMCONNECTINFO,
  8747.         KSPROPERTY_VPCONFIG_GETCONNECTINFO,
  8748.         KSPROPERTY_VPCONFIG_SETCONNECTINFO,
  8749.         KSPROPERTY_VPCONFIG_VPDATAINFO,
  8750.         KSPROPERTY_VPCONFIG_MAXPIXELRATE,
  8751.         KSPROPERTY_VPCONFIG_INFORMVPINPUT,
  8752.         KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT,
  8753.         KSPROPERTY_VPCONFIG_GETVIDEOFORMAT,
  8754.         KSPROPERTY_VPCONFIG_SETVIDEOFORMAT,
  8755.         KSPROPERTY_VPCONFIG_INVERTPOLARITY,
  8756.         KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY,   // E_NOTIMPL for VBI
  8757.         KSPROPERTY_VPCONFIG_SCALEFACTOR,            // E_NOTIMPL for VBI
  8758.         KSPROPERTY_VPCONFIG_DDRAWHANDLE,
  8759.         KSPROPERTY_VPCONFIG_VIDEOPORTID,
  8760.         KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE,
  8761.         KSPROPERTY_VPCONFIG_SURFACEPARAMS
  8762.     } KSPROPERTY_VPCONFIG;
  8763.  
  8764.     //=========================
  8765.     // IBasicAudio
  8766.     //
  8767.     #define STATIC_CLSID_KsIBasicAudioInterfaceHandler\
  8768.         0xb9f8ac3e, 0x0f71, 0x11d2, 0xb7, 0x2c, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d
  8769.     DEFINE_GUIDSTRUCT("b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d", CLSID_KsIBasicAudioInterfaceHandler);
  8770.     #define CLSID_KsIBasicAudioInterfaceHandler DEFINE_GUIDNAMED(CLSID_KsIBasicAudioInterfaceHandler)
  8771.  
  8772.  
  8773.     #if defined(__IVPType__)
  8774.  
  8775.     typedef struct {
  8776.         AMVPSIZE    Size;
  8777.         DWORD       MaxPixelsPerSecond;
  8778.         DWORD       Reserved;
  8779.     } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
  8780.  
  8781.     typedef struct {
  8782.         KSPROPERTY      Property;
  8783.         AMVPSIZE        Size;
  8784.     } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
  8785.  
  8786.     typedef struct {
  8787.         DWORD   dwPitch;
  8788.         DWORD   dwXOrigin;
  8789.         DWORD   dwYOrigin;
  8790.     } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
  8791.  
  8792.     #else  // !defined(__IVPType__)
  8793.  
  8794.     #if !defined(__DDRAW_INCLUDED__)
  8795.  
  8796.     //==========================================================================
  8797.     // The following definitions must be in sync with DDraw.h in DirectX SDK
  8798.     //==========================================================================
  8799.  
  8800.     /*
  8801.      * The FourCC code is valid.
  8802.      */
  8803.     #define DDPF_FOURCC                             0x00000004l
  8804.  
  8805.  
  8806.     typedef struct _DDPIXELFORMAT
  8807.     {
  8808.         DWORD       dwSize;                 // size of structure
  8809.         DWORD       dwFlags;                // pixel format flags
  8810.         DWORD       dwFourCC;               // (FOURCC code)
  8811.         union
  8812.         {
  8813.         DWORD   dwRGBBitCount;          // how many bits per pixel (BD_1,2,4,8,16,24,32)
  8814.         DWORD   dwYUVBitCount;          // how many bits per pixel (BD_4,8,16,24,32)
  8815.         DWORD   dwZBufferBitDepth;      // how many bits for z buffers (BD_8,16,24,32)
  8816.         DWORD   dwAlphaBitDepth;        // how many bits for alpha channels (BD_1,2,4,8)
  8817.         };
  8818.         union
  8819.         {
  8820.         DWORD   dwRBitMask;             // mask for red bit
  8821.         DWORD   dwYBitMask;             // mask for Y bits
  8822.         };
  8823.         union
  8824.         {
  8825.         DWORD   dwGBitMask;             // mask for green bits
  8826.         DWORD   dwUBitMask;             // mask for U bits
  8827.         };
  8828.         union
  8829.         {
  8830.         DWORD   dwBBitMask;             // mask for blue bits
  8831.         DWORD   dwVBitMask;             // mask for V bits
  8832.         };
  8833.         union
  8834.         {
  8835.         DWORD   dwRGBAlphaBitMask;      // mask for alpha channel
  8836.         DWORD   dwYUVAlphaBitMask;      // mask for alpha channel
  8837.         DWORD   dwRGBZBitMask;          // mask for Z channel
  8838.         DWORD   dwYUVZBitMask;          // mask for Z channel
  8839.         };
  8840.     } DDPIXELFORMAT, * LPDDPIXELFORMAT;
  8841.  
  8842.     #endif // !defined(__DDRAW_INCLUDED__)
  8843.  
  8844.     //==========================================================================
  8845.     // End of DDraw.h header info
  8846.     //==========================================================================
  8847.  
  8848.     //==========================================================================
  8849.     // The following definitions must be in sync with DVP.h in DirectX SDK
  8850.     //==========================================================================
  8851.  
  8852.     #if !defined(__DVP_INCLUDED__)
  8853.  
  8854.     typedef struct _DDVIDEOPORTCONNECT {
  8855.         DWORD dwSize;           // size of the DDVIDEOPORTCONNECT structure
  8856.         DWORD dwPortWidth;      // Width of the video port
  8857.         GUID  guidTypeID;       // Description of video port connection
  8858.         DWORD dwFlags;          // Connection flags
  8859.         DWORD dwReserved1;      // Reserved, set to zero.
  8860.     } DDVIDEOPORTCONNECT, * LPDDVIDEOPORTCONNECT;
  8861.  
  8862.     #define DDVPTYPE_E_HREFH_VREFH  \
  8863.         0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
  8864.  
  8865.     #define DDVPTYPE_E_HREFL_VREFL  \
  8866.         0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
  8867.  
  8868.     #endif // !defined(__DVP_INCLUDED__)
  8869.  
  8870.     //==========================================================================
  8871.     // End of DVP.h header info
  8872.     //==========================================================================
  8873.  
  8874.  
  8875.     //==========================================================================
  8876.     // The following definitions must be in sync with VPType.h in AM 2.0 SDK
  8877.     //==========================================================================
  8878.  
  8879.     // pixel aspect ratios corresponding to a 720x480 NTSC image or a 720x576 image
  8880.     typedef enum // AMPixAspectRatio
  8881.     {
  8882.         KS_PixAspectRatio_NTSC4x3,
  8883.         KS_PixAspectRatio_NTSC16x9,
  8884.         KS_PixAspectRatio_PAL4x3,
  8885.         KS_PixAspectRatio_PAL16x9,
  8886.     } KS_AMPixAspectRatio ;
  8887.  
  8888.     typedef enum // AMVP_SELECTFORMATBY
  8889.     {
  8890.         KS_AMVP_DO_NOT_CARE,
  8891.         KS_AMVP_BEST_BANDWIDTH,
  8892.         KS_AMVP_INPUT_SAME_AS_OUTPUT
  8893.     } KS_AMVP_SELECTFORMATBY;
  8894.  
  8895.     typedef enum // AMVP_MODE
  8896.     {
  8897.         KS_AMVP_MODE_WEAVE,
  8898.         KS_AMVP_MODE_BOBINTERLEAVED,
  8899.         KS_AMVP_MODE_BOBNONINTERLEAVED,
  8900.         KS_AMVP_MODE_SKIPEVEN,
  8901.         KS_AMVP_MODE_SKIPODD
  8902.     } KS_AMVP_MODE ;
  8903.  
  8904.     typedef struct tagKS_AMVPDIMINFO      // AMVPDIMINFO
  8905.     {
  8906.         DWORD dwFieldWidth ;            // [out] field width
  8907.         DWORD dwFieldHeight ;           // [out] field height
  8908.         DWORD dwVBIWidth ;              // [out] VBI data width
  8909.         DWORD dwVBIHeight ;             // [out] VBI data height
  8910.         RECT  rcValidRegion ;           // [out] valid rect for data cropping
  8911.     } KS_AMVPDIMINFO, *PKS_AMVPDIMINFO ;
  8912.  
  8913.     typedef struct tagKS_AMVPDATAINFO   // AMVPDATAINFO
  8914.     {
  8915.         DWORD           dwSize;                 // Size of the struct
  8916.         DWORD           dwMicrosecondsPerField; // Time taken by each field
  8917.         KS_AMVPDIMINFO  amvpDimInfo;            // Dimensional Information
  8918.         DWORD           dwPictAspectRatioX;     // Pict aspect ratio in X dimn
  8919.         DWORD           dwPictAspectRatioY;     // Pict aspect ratio in Y dimn
  8920.         BOOL            bEnableDoubleClock;     // Videoport should enable double clocking
  8921.         BOOL            bEnableVACT;            // Videoport should use an external VACT signal
  8922.         BOOL            bDataIsInterlaced;      // Indicates that the signal is interlaced
  8923.         LONG            lHalfLinesOdd;          // number of halflines in the odd field
  8924.         BOOL            bFieldPolarityInverted; // Device inverts the polarity by default
  8925.         DWORD           dwNumLinesInVREF;       // Number of lines of data in VREF
  8926.         LONG            lHalfLinesEven;         // number of halflines in the even field
  8927.         DWORD           dwReserved1;            // Reserved for future use
  8928.     } KS_AMVPDATAINFO, *PKS_AMVPDATAINFO;
  8929.  
  8930.     typedef struct tagKS_AMVPSIZE   // AMVPSIZE
  8931.     {
  8932.         DWORD dwWidth ;                  // [in] width in pixels
  8933.         DWORD dwHeight ;                 // [in] height in pixels
  8934.     } KS_AMVPSIZE, *PKS_AMVPSIZE ;
  8935.  
  8936.     //==========================================================================
  8937.     // End of VPType.h header info
  8938.     //==========================================================================
  8939.  
  8940.     typedef struct {
  8941.         KS_AMVPSIZE     Size;
  8942.         DWORD           MaxPixelsPerSecond;
  8943.         DWORD           Reserved;
  8944.     } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
  8945.  
  8946.     typedef struct {
  8947.         KSPROPERTY      Property;
  8948.         KS_AMVPSIZE     Size;
  8949.     } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
  8950.  
  8951.     typedef struct {
  8952.         DWORD   dwPitch;
  8953.         DWORD   dwXOrigin;
  8954.         DWORD   dwYOrigin;
  8955.     } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
  8956.  
  8957.     #endif // !defined(__IVPType__)
  8958.  
  8959.     //
  8960.     //  IVPNotify event notification
  8961.     //
  8962.     #define STATIC_KSEVENTSETID_VPNotify\
  8963.         0x20c5598eL, 0xd3c8, 0x11d0, 0x8d, 0xfc, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b
  8964.     DEFINE_GUIDSTRUCT("20c5598e-d3c8-11d0-8dfc-00c04fd7c08b", KSEVENTSETID_VPNotify);
  8965.     #define KSEVENTSETID_VPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VPNotify)
  8966.  
  8967.     typedef enum {
  8968.         KSEVENT_VPNOTIFY_FORMATCHANGE,
  8969.     } KSEVENT_VPNOTIFY;
  8970.  
  8971.     //
  8972.     //  VIDCAPTOSTI event notification
  8973.     //
  8974.     #define STATIC_KSEVENTSETID_VIDCAPTOSTI\
  8975.         0xdb47de20, 0xf628, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5
  8976.     DEFINE_GUIDSTRUCT("DB47DE20-F628-11d1-BA41-00A0C90D2B05", KSEVENTSETID_VIDCAPTOSTI);
  8977.     #define KSEVENTSETID_VIDCAPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAPTOSTI)
  8978.  
  8979.     typedef enum {
  8980.         KSEVENT_VIDCAPTOSTI_EXT_TRIGGER,
  8981.     } KSEVENT_VIDCAPTOSTI;
  8982.  
  8983.  
  8984.     //
  8985.     //  IVPVBINotify event notification
  8986.     //
  8987.     #define STATIC_KSEVENTSETID_VPVBINotify\
  8988.         0xec529b01L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  8989.     DEFINE_GUIDSTRUCT("ec529b01-1a1f-11d1-bad9-00609744111a", KSEVENTSETID_VPVBINotify);
  8990.     #define KSEVENTSETID_VPVBINotify DEFINE_GUIDNAMED(KSEVENTSETID_VPVBINotify)
  8991.  
  8992.     typedef enum {
  8993.         KSEVENT_VPVBINOTIFY_FORMATCHANGE,
  8994.     } KSEVENT_VPVBINOTIFY;
  8995.  
  8996.  
  8997.     //
  8998.     // closed caption information
  8999.     //
  9000.  
  9001.     #define STATIC_KSDATAFORMAT_TYPE_AUXLine21Data \
  9002.     0x670aea80L, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  9003.     DEFINE_GUIDSTRUCT("670aea80-3a82-11d0-b79b-00aa003767a7", KSDATAFORMAT_TYPE_AUXLine21Data);
  9004.     #define KSDATAFORMAT_TYPE_AUXLine21Data DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUXLine21Data)
  9005.  
  9006.     #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_BytePair \
  9007.     0x6e8d4a22L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  9008.     DEFINE_GUIDSTRUCT("6e8d4a22-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_BytePair);
  9009.     #define KSDATAFORMAT_SUBTYPE_Line21_BytePair DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_BytePair)
  9010.  
  9011.     #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_GOPPacket \
  9012.     0x6e8d4a23L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  9013.     DEFINE_GUIDSTRUCT("6e8d4a23-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_GOPPacket);
  9014.     #define KSDATAFORMAT_SUBTYPE_Line21_GOPPacket DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_GOPPacket)
  9015.  
  9016.     typedef struct _KSGOP_USERDATA {
  9017.         ULONG sc;
  9018.         ULONG reserved1;
  9019.         BYTE cFields;
  9020.         CHAR l21Data[3];
  9021.     } KSGOP_USERDATA, *PKSGOP_USERDATA;
  9022.  
  9023.     //
  9024.     // DVD encrypted PACK format type definition
  9025.     //
  9026.  
  9027.     #define STATIC_KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK\
  9028.         0xed0b916a, 0x044d, 0x11d1, 0xaa, 0x78, 0x00, 0xc0, 0x4f, 0xc3, 0x1d, 0x60
  9029.     DEFINE_GUIDSTRUCT("ed0b916a-044d-11d1-aa78-00c04fc31d60", KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK);
  9030.     #define KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK)
  9031.  
  9032.     #define KS_AM_UseNewCSSKey    0x1
  9033.  
  9034.  
  9035.     // -----------------------------------------------------------------------
  9036.     // KS_AM_KSPROPSETID_TSRateChange property set definitions for time stamp
  9037.     // rate changes.
  9038.     // -----------------------------------------------------------------------
  9039.  
  9040.  
  9041.     #define STATIC_KSPROPSETID_TSRateChange\
  9042.         0xa503c5c0, 0x1d1d, 0x11d1, 0xad, 0x80, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0
  9043.  
  9044.     DEFINE_GUIDSTRUCT("A503C5C0-1D1D-11D1-AD80-444553540000", KSPROPSETID_TSRateChange);
  9045.     #define KSPROPSETID_TSRateChange DEFINE_GUIDNAMED(KSPROPSETID_TSRateChange)
  9046.     typedef enum {
  9047.         KS_AM_RATE_SimpleRateChange=1,  // rw, use KS_AM_SimpleRateChange
  9048.         KS_AM_RATE_ExactRateChange=2,   // rw, use KS_AM_ExactRateChange
  9049.         KS_AM_RATE_MaxFullDataRate=3,   // r, use KS_AM_MaxFullDataRate
  9050.         KS_AM_RATE_Step=4               // w, use KS_AM_Step
  9051.     } KS_AM_PROPERTY_TS_RATE_CHANGE;
  9052.  
  9053.     typedef struct {
  9054.         // this is the simplest mechanism to set a time stamp rate change on
  9055.         // a filter (simplest for the person setting the rate change, harder
  9056.         // for the filter doing the rate change).
  9057.         REFERENCE_TIME  StartTime;  //stream time at which to start this rate
  9058.         LONG        Rate;       //new rate * 10000 (decimal)
  9059.     } KS_AM_SimpleRateChange, *PKS_AM_SimpleRateChange;
  9060.  
  9061.     typedef struct {
  9062.         REFERENCE_TIME  OutputZeroTime; //input TS that maps to zero output TS
  9063.         LONG        Rate;       //new rate * 10000 (decimal)
  9064.     } KS_AM_ExactRateChange, *PKS_AM_ExactRateChange;
  9065.  
  9066.     typedef LONG KS_AM_MaxFullDataRate; //rate * 10000 (decimal)
  9067.  
  9068.     typedef DWORD KS_AM_Step; // number of frame to step
  9069.  
  9070.  
  9071. #endif    // DirectX 8.0 content
  9072.  
  9073.  
  9074. #endif // !defined(_KSMEDIA_)
  9075.